2的幂次方
解题思路,代码
任何一个正整数都可以用2的幂次方表示。
同时约定用括号来表示方次,即a的b次,可以表示为a(b)。
由此可知,137可以表示为:
2(7)+2(3)+2(0)
进一步:
7=2(2)+2+2(0)(2的1次用2表示)
3=2+2(0)
所以137可以表示为:
2(2(2)+2+2(0))+2(2+2(0))+2(0)
按
2
的次幂降次排列。
输入
正整数n(n<=20000)
输出
用0,2表示符合约定的n(在表格中不能有空格)。
样例输入
137
样例输出
2(2(2)+2+2(0))+2(2+2(0))+2(0)
代码解释
#include<bits/stdc++.h>
using namespace std;
void ss(int n,int sum)//n为被分解的数,sum为二进制位数。
{
if(n==0)
return;//如果n==0,直接返回。
ss(n/2,sum+1);
if(n%2)
{
if(n/2)
cout<<"+";//如果n≠0,表示这不是第一个2的幂次方,则输出加号。
if(sum==1)
cout<<"2";
else
{
cout<<"2(";
if(sum==0) cout<<"0";
else ss(sum,0);
cout<<")";
}
}
}//如果n不能用2(0),2,2(2)表示则继续分解
int main()
{
int a;
cin>>a;
ss(a,0);
cout<<endl;
return 0;
}