```cpp
#include <bits/stdc++.h>
using namespace std;
void npow(int n){
bool f = false;
while(n){
int t = int(log2(n));
if(f) cout << "+";
if(t == 1) cout << "2";
else if(t == 0) cout << "2(0)";
else {
cout << "2(";
npow(t);
cout << ")";
}
n -= pow(2, t);
f = true;
}
}
int main(){
int n;
cin >> n;
npow(n);
return 0;
}
```
~~别问我为什么,因为所以~~
这道题就是一个简单的递归
by xzwang79 @ 2024-03-19 20:45:38
$100pts$
这题我用数组的解法讲一遍,
先创一个数组:
```int mark[20]={1};```
然后写一个void无返回函数,放一个参数 ```int n;```
在里面这么写:
```cpp
void f(int n){
int flag=0; //初始化
while(n>=mark[flag]){ //搬一下前面的数组
flag++; //递增
}
flag--; //跳出来减
if(flag==1){ //特判+1
cout<<2;
}else{
if(flag==0){
cout<<"2(0)";//特判+2
}else{
cout<<"2("; //字符
f(flag); //调用前面手写的函数
cout<<")";
}
}
n-=mark[flag];
if(n!=0){
cout<<"+";
f(n); //调用
}
}
```
我把主函数也贴过来:
```cpp
int main(){
int n;
cin>>n;
for(int i=1;i<17;i++){
mark[i]=mark[i-1]*2;
}
f(n); //最后调用一下
return 0; //收尾
}
```
by Leo_Lyc @ 2024-04-06 15:17:27
@[Leo_Lyc](/user/1052917) 谢谢DALAO,已经解决了
by Gold_Ballon @ 2024-04-07 12:50:55