两数相乘0的个数
介绍
我们计算两个数相乘0的个数的时候,可以直接简单粗暴的乘出来再看,但是如果数非常多,而且数又非常大的时候怎么办呢?到时候肯定不能粗暴的做了。
我们可以找每个数的2的因子个数和5的因子个数。看看有多少对因子2和因子5。
例如下面这个题。
题目例子
讲解
我们不用直接计算两个数相乘,我们看所有的数中因子2和因子5的个数,有一对2和5,就会有一个0。最后算出来2和5不一定能凑对,可能会有一个数多,那么我们就取2和5中个数最少的那个就行了。
发散
我们看一个数有多少个0,我们可以看这个数包含多少对2和5。
因为这个数可以写成两个数相乘的形式,所以我们看这两个乘数有多少对2和5就行了。
源代码
#include <bits/stdc++.h>
using namespace std;
#define LL long long
#define endl "\n"
const int N = 110;
int a[N];
void read()
{
for (int i = 0; i < 100; i ++ ) cin >> a[i];
}
int val_2(int x)
{
int cnt = 0;
while(x % 2 == 0)
{
cnt ++;
x /= 2;
}
return cnt;
}
int val_5(int x)
{
int cnt = 0;
while(x % 5 == 0)
{
cnt ++;
x /= 5;
}
return cnt;
}
void solve()
{
int num_2 = 0, num_5 = 0;
for (int i= 0; i < 100; i ++ )
{
num_2 += val_2(a[i]);
num_5 += val_5(a[i]);
}
int res = min(num_2, num_5);
cout << res << endl;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
read();
solve();
return 0;
}
版权声明:
作者:徐锦桐
链接:https://www.xujintong.com/2023/02/17/149/
自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
作者:徐锦桐
链接:https://www.xujintong.com/2023/02/17/149/
自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
THE END