问题描述 任何一个正整数都可以用2的幂次方表示。例如: 137=27+23+20 同时约定方次用括号来表示,即ab 可表示为a(b)。 由此可知,137可表示为: 2(7)+2(3)+2(0) 进一步:7= 22+2+20 (21用2表示) 3=2+20 所以最后137可表示为: 2(2(2)+2+2(0))+2(2+2(0))+2(0) 又如: 1315=210 +28 +25 +2+1 所以1315最后可表示为: 2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0) 输入格式 输入包含一个正整数N(N<=20000),为要求分解的整数。 输出格式程序输出包含一行字符串,为符合约定的n的0,2表示(在表示中不能有空格)
#include <cstdio> #include <iostream> using namespace std; void divide(int n) { int count = 0; for(int i = 31; i >= 0; --i) if(n&(1<<i)) { if(count++)printf("+"); if(i==0) printf("2(0)"); else if(i==1) printf("2"); else { cout<<2<<'('; divide(i); cout<<')'; } } } int main() { int n; cin >> n; divide(n); cout << endl; return 0; }
幂方分解 (vip)
最新推荐文章于 2021-07-24 10:58:01 发布