P1010 幂次方
这个题看起来十分的复杂,不过读完题就发现这题其实就是个递归(虽然我递归这块学的不好( ̄▽ ̄)")
这题就是把一个数分成二的几次方的和,然后余数和比它小的最大的二的次方数,如果不是二的一次方或者二的零次方,就要接着递归。
感觉写起来会很复杂啊。
直接上代码吧:
#include<iostream> #include<cmath> using namespace std; int n; void dg(int x) { for(int i=14;i>=0;i--) { if(pow(2,i)<=x) { if(i==1)//这样就说明n是2或者3,就不需要输出括号了 { cout<<"2"; } else if(i==0) { cout<<"2(0)";//这样就说明n是1 } else { cout<<"2("; dg(i); cout<<")"; } x-=pow(2,i);//取余 if(x!=0)//有余数时就输出+号 { cout<<"+"; } } } } int main() { cin>>n; dg(n); return 0; }
愉快的过了这题O(∩_∩)O