P1010 幂次方 二进制 递归
程序员文章站
2022-05-08 22:49:20
...
#include<bits/stdc++.h>
using namespace std;
void toBi(int n, int a[1000], int &f){ //把十进制数转化为二进制数
while(n){
a[f++] = n%2;
n /= 2;
}
}
void fuc(int n){ //递归函数
if(n==1){ //等于1 return 相当于只输出2
return;
}
if(n==0){ //等于0 输出(0) 相当于输出 2(0)
cout<<"(0)";
return;
}
cout<<"("; //如果n没有等于0或1 证明会有一个式子, 所以在新一轮递归前后加括号
int a[1000], f = 0; //新一轮递归
toBi(n, a, f);
for(int i=f-1; i>=0; i--){
if(!a[i])
continue;
if(i<f-1)
cout<<"+";
cout<<"2";
fuc(i);
cout<<"";
}
cout<<")";
}
int main(){
int n, a[1000] = {0}, cnt = 0;
cin>>n;
if(n==0){ //我也不知道会不会有n=0的情况,反正加上就对了
cout<<"0";
return 0;
}
toBi(n, a, cnt); //将十进制转化为2进制
for(int i=cnt-1; i>=0; i--){
if(!a[i]) //剪掉不为1的位置
continue;
if(i<cnt-1) //加号位置
cout<<"+";
cout<<"2";
fuc(i);
cout<<"";
}
return 0;
}
上一篇: 30岁,你姥姥