1 条题解

  • 2
    @ 2024-8-18 21:34:26

    这个题目我们可以使用二进制的位运算来做。首先我们知道int正的数据范围是2的31次方-1。所以我们从31枚举到0,首先,我们将数字n的二进制表示向右移动i位,然后再检查右移后的结果的最低位是否为1,如果这个条件成立,那么就输出2的i次方。

    AC code

    #include <bits/stdc++.h>
    using namespace std;
    int main(){
    	int n;
    	cin>>n;
    	if(n%2==1){
    		cout<<-1;
    		return 0;
    	}
    	for(int i=31;i>=0;i--){
    		if((n>>i)&1){
    			cout<<(1<<i)<<' ';
    		}
    	}
    	return 0;
    }
    

    信息

    ID
    483
    时间
    1000ms
    内存
    256MiB
    难度
    7
    标签
    递交数
    153
    已通过
    33
    上传者