• 优秀的拆分(power)


    方法一:模拟

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int main()
     4 {
     5     int n;
     6     cin>>n;
     7     if(n%2==1)
     8         cout<<-1;
     9     else{
    10         while(n>0){
    11             int p=1;
    12             while(n>=p)
    13                 p*=2;
    14             cout<<p/2<<" ";
    15             n-=p/2;
    16         }
    17     }
    18     return 0;
    19  } 

    方法二:位运算(按位&)

    举例说明1:14  的可以最优拆分为 8 4 2

    14的二进制1110

    8  的二进制1000  与14按位&结果为1000  (8 非0)

    4  的二进制0100  与14按位&结果为0100  (4 非0)

    2  的二进制0010  与14按位&结果为0010  (2 非0)

    举例说明2:10  的可以最优拆分为 8 2

    10的二进制1010

    8  的二进制1000  与10按位&结果为1000   (8 非0)

    4  的二进制0100  与10按位&结果为0000   (0 )

    2  的二进制0010  与10按位&结果为0010   (2 非0)

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int n;
     4 int main()
     5 {
     6     cin>>n;
     7     if(n&1)
     8         cout<<-1;
     9     else{
    10         for(int i=31; i>=1; i--){//n值范围[1,10^7]所以i枚举范围[31,1]
    11             int t=(1<<i);// 或者 t=pow(2, i);
    12             if(t&n)
    13             cout<<t<<" ";
    14         }
    15     }
    16     return 0;
    17 }
  • 相关阅读:
    异步-promise、async、await
    node
    node基础 day1
    gulp的简介以及使用方法
    web前端安全——常见的web攻击方法
    Linux修改IP地址
    在linux下批量删除文件
    常用内容的正则表达式
    Oracle 数据库自带用户有哪些
    统计Oracle数据库当前User下各表的记录数
  • 原文地址:https://www.cnblogs.com/tflsnoi/p/13941406.html
Copyright © 2020-2023  润新知