80pts 题目:https://hydro.ac/d/ccf/p/CSPJ2020A 评测记录:https://hydro.ac/d/ccf/record/6121f121e1b6d183ff865f2a

#include<bits/stdc++.h>
using namespace std;

int main()
{
	int a;
	cin>>a;
	if(a%2) cout<<"-1";
	else{
		for(int i=1;i<30;i++){
			int b=pow(2,i);
			if(b>a) {
				cout<<pow(2,i-1)<<" ";
				a=a-pow(2,i-1);
				i=0;
			}
			if(a==0){
				return 0;
			}
		}
	}
    return 0;	
} 

4 条评论

  • @ 2021-8-27 10:10:44

    pow有精度问题,建议先预处理出 2i2^i,或者学习位运算来解决问题

    • @ 2021-8-24 16:00:13

      请改为:

      #include <bits/stdc++.h>
      using namespace std;
      
      int main() {
          int a;
          cin >> a;
      
          if (a % 2)
              cout << "-1";
          else {
              for (int i = 1; i < 30; i++) {
                  int b = pow(2, i);
      
                  if (b > a) {
                      cout << int(pow(2, i - 1)) << " ";
                      a = a - pow(2, i - 1);
                      i = 0;
                  }
      
                  if (a == 0) {
                      return 0;
                  }
              }
          }
      
          return 0;
      }
      

      未经过测评论证,但是基本上就是这个意思((

      • @ 2021-8-23 11:57:28

        我们建议将此类问题发至对应题目的讨论区。

      • @ 2021-8-22 18:33:08

        pow有精度问题

        • 1