WA…………

P7071 [CSP-J2020] 优秀的拆分

@[BoyuZhang](/user/781722) 不要用``freopen``
by williamY @ 2023-10-11 18:10:33


e,我AC了 请教一下,为什么吧 ```cpp cout<<pow(2,i)<<" "; ``` 改成 ```cpp cout<<(int)pow(2,i)<<" "; ``` 就行了呢???
by BoyuZhang @ 2023-10-11 18:12:53


sorry,那个……代码贴错了 ```cpp #include<iostream> #include<cstdio> #include<cmath> using namespace std; int n,k; int m[1000]; int main(){ //freopen("P7071.in","r",stdin); //freopen("P7071.out","w",stdout); cin>>n; if(n%2==1){ cout<<-1; return 0; } for(int i=0;n>0;i++){ m[i]=n%2; n/=2; k++; } for(int i=k-1;i>=0;i--){ if(m[i]>0){ cout<<pow(2,i)<<" "; } } } ```
by BoyuZhang @ 2023-10-11 18:13:51


``` #include<bits/stdc++.h> using namespace std; const int maxn=100005; int n; long long now=1; bool a[105]; int main() { scanf("%d",&n); if (n%2!=0) { printf("-1"); return 0; } int i=0; while(now*2<=n) { now*=2; i++; } int i1=i; while(now>1) { if (n-now>=0) { a[i1]=1; n-=now; } i1--; now/=2; } for (int j=i;j>=1;--j) { if (a[j]==0) continue; long long ans=pow(2,j); printf("%lld ",ans); } return 0; } ```
by masiyudr @ 2023-10-11 18:18:07


@[BoyuZhang](/user/781722) 首先你要知道pow()返回的是double,double怎么输出就比较随性了。 比如说可能会变成科学计数法或者带小数,算起来精度也有问题。
by wosile @ 2023-10-11 18:55:54


@[wosile](/user/280243) @[mjb023](/user/982155) 感谢大佬指教
by BoyuZhang @ 2023-10-11 18:58:01


|