我不是酸菜鱼

简化题意:
n个数相乘得到数g,求g二进制下后导0的个数

考虑把n个数都换成二进制,模拟二进制相乘即可发现规律
答案即是n个数的二进制下后导0的个数相加

证明

我们假设2个数相乘,分别是20,22
首先将他们2个转为二进制

  • 20:10100
  • 22:10110

我们再模拟二进制下的相乘
二进制下的相乘
可以发现得出的数的二进制下后导0即是相乘的两个数的二进制下后导0数量之和

参考代码

#include<bits/stdc++.h>
using namespace std;
int n,x,ans;
int main()
{
    cin>>n;
    while(n--){
        scanf("%d",&x);
        while(x) (x&1)?x=0:ans++,x>>=1;
    }
    cout<<ans<<"\n";
    return 0;
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务