明明觉得是水题,而我却做了一个小时。
明明觉得代码没有错,而我却错了好几次。
因为我的名字不叫明明,也不叫铭铭T_T最后还是铭神指出了我的错误
又新学到了新的姿势:
1.浮点数的比较要用eps来比较
2.log2(n)要写成log10(n)/log10(2)
其他的话这道题目刚开始没有思路,其实在草稿纸上写一下就可以发现了哦我的表达能力太差了只可意会不可言传T_T
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
1 #include2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 9 #define rep(i,a,n) for(int i = a;i < n;i++)10 #define per(i,n,a) for(int i = n-1;i >=a;i--)11 #define pb push_back12 #define VI vector 13 #define QI queue 14 #define log2(N) log10(N)/log10(2)15 #define eps 1e-816 17 typedef long long ll;18 19 using namespace std;20 21 22 int n;23 //int a[M][P] = {};24 25 void solve(int b){26 int m = b;27 while(log2(m) - floor(log2(m))>eps){28 m--;29 }30 int tmp = b - m;31 int d = floor(log2(m)+1);32 if(tmp == 0){33 printf("%d",d);34 return;35 }36 printf("%d ",d);37 solve(tmp);38 }39 40 int main(){41 while(~scanf("%d",&n)){42 solve(n);43 puts("");44 }45 return 0;46 }