蓝桥杯备考:模拟算法+二进制之---》良好的拆分

打印 上一主题 下一主题

主题 948|帖子 948|积分 2844



这道题其实就是...观察我们对数的二进制的明白,好比5是2的2次方加2的0次方,和5的二进制转十进制是对应的,碰巧5的二进制就是101,以是这是对二进制的一种观察吧。
必须是2的正整数次幂相加才行,那就阐明如果一个数的二进制的最低位是1的话,我们就把它排除了,
 
  1. #include <iostream>
  2. #include <cmath>
  3. using namespace std;
  4. int main()
  5. {
  6.         int n;cin >> n;
  7.         if(n&1) {
  8.                 cout << "-1" << endl;
  9.                 return 0;
  10.         }
  11.         for(int i = 31;i>=1;i--)
  12.         {
  13.                 if((n>>i) &1)
  14.                 {
  15.                         cout << pow(2,i) << " ";
  16.                 }
  17.         }
  18.        
  19.        
  20.        
  21.        
  22.        
  23.         return 0;
  24. }
复制代码
我第一次写代码的时间写成了如许,但是会有部分测试用例过不了,哦,最后我发现,如果数很大的话,double范例打印的形式是科学计数法的形式
,我们可以强转成int就能通过了,固然了,我们也可以选择不消这个pow函数
  1. #include <iostream>
  2. #include <cmath>
  3. using namespace std;
  4. int main()
  5. {
  6.         int n;cin >> n;
  7.         if(n&1) {
  8.                 cout << "-1" << endl;
  9.                 return 0;
  10.         }
  11.         for(int i = 31;i>=1;i--)
  12.         {
  13.                 if((n>>i) &1)
  14.                 {
  15.                         cout << (int)pow(2,i) << " ";
  16.                 }
  17.         }
  18.        
  19.        
  20.        
  21.        
  22.        
  23.         return 0;
  24. }
复制代码
我们也可以用位运算来计算结果
  1. #include <iostream>
  2. #include <cmath>
  3. using namespace std;
  4. int main()
  5. {
  6.         int n;cin >> n;
  7.         if(n&1) {
  8.                 cout << "-1" << endl;
  9.                 return 0;
  10.         }
  11.         for(int i = 31;i>=1;i--)
  12.         {
  13.                 if((n>>i) &1)
  14.                 {
  15.                         cout << (1<<i) << " ";
  16.                 }
  17.         }
  18.        
  19.        
  20.        
  21.        
  22.        
  23.         return 0;
  24. }
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

悠扬随风

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表