二进制解法
2026-08-14 15:15:22
发布于:江苏
0阅读
0回复
0点赞
首先将该数的二进制存入数组中,然后对数组进行访问,如果遇到零就跳过,否则就乘上对应的二进制数
using namespace std;
int n;
int a[1010];
int idx=0;//a数组中的元素数量
void f(int n){
if(n==0){
return;
}
f(n/2);
a[++idx]=n%2;将该数二进制存入a
}
int main(){
cin>>n;
if(n%2==1){//奇数分解尔不了
cout<<-1;
return 0;
}
f(n);
for(int i=1;i<=idx;i++){
if(a[i]*pow(2,(idx-i))==0)continue;//如果该二进制位是0,就不打印
cout<<int(a[i]*pow(2,(idx-i)))<<' ';//这里的int一定要加,不加只能得80!!
}
return 0;
}
整体代码唯一需注意的就是
cout<<int(a[i]*pow(2,(idx-i)))<<' '
*这里要加一个int,因为pow返回类型是double不加有四个测试点一定过不了!!!
这里空空如也



有帮助,赞一个