我不是酸菜鱼
简化题意:
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; }