AC

せいしゅん404  •  3年前


#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int p[16],x=0;
bool first=true;
void npow(int n){
int i;
//n不等于0就继续分解。
while(n){
for(i=x;i>=0;i--){
if(p[i]<=n){
n=n-p[i];
if(first)first=false;
else cout<<"+";
if(i>1){
cout<<"2(";
first=true;
npow(i);
cout<<")";
break;
}
if(i==1)cout<<"2";
if(i==0)cout<<"2(0)";
}
}
}
}
int main(void){
int n;
cin>>n;
p[0]=1;
//计算并存放2的n个次方的值是否小于n
while(p[x]<n){
x++;//计算下一个次方
p[x]=p[x-1]*2;//利用上一个次方乘以底数2得到当前次方的值
}
//利用n递归
npow(n);
return 0;
}


评论:

请先登录,才能进行评论