蓝桥打卡-3-乘积尾0
作者:
因为yxc爱上编程
,
2024-04-05 11:22:53
,
所有人可见
,
阅读 43
- 直接去统计每个相乘的数的因子2和因子5的个数
最后取两者的最小值,就是尾积0的个数,因为一个2与5可以得出一个0!!!
#include<iostream>
#include<algorithm>
using namespace std;
const int N=110;
int a[N];
int main(){
for(int i=0;i<100;i++)
scanf("%d",&a[i]);
int cnt2=0,cnt5=0;
for(int i=0;i<100;i++){
int m=a[i];
int n=a[i];
while(m%2==0){
m=m/2;
cnt2++;
}
while(n%5==0){
n=n/5;
cnt5++;
}
}
cout<<min(cnt2,cnt5)<<endl;
return 0;
}
- 或者直接暴力相乘,利用高精度整数乘法来做,然后统计最后出现0的个数
#include<iostream>
#include<vector>
using namespace std;
const int N=110;
int a[N];
vector<int>c(1000,1);
int len=1;//记录当前结果的位数
void mul(int n){
for(int i=0;i<len;i++)c[i]*=n;
int t=0;
for(int i=0;i<len;i++)
{
t+=c[i];
c[i]=t%10;
t=t/10;
}
while(t){ //因为后绪还要相乘,所以必须把每个数单独存一位
c[len++]=t%10;
t=t/10;
}
}
int main(){
for(int i=0;i<100;i++){
scanf("%d",&a[i]);
mul(a[i]);
}
for(int i=0;i<100;i++){
if(c[i]!=0){
cout<<i<<endl;
break;
}//a[0]存的是从个位开始的数
}
}