全WA,求助

P1010 [NOIP1998 普及组] 幂次方

```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


|