题目链接
解题思路:
末尾是0,只有可能是5与其他偶数的乘积
偶数又可被分为若干个2相乘
所以该题可以转化为把乘数都分解,统计2和5的数量
假设最后得到x个2,y个5
x>y,比如2个2,1个5,最后乘出来是20,也就是1个0
x<y,比如1个2,2个5,最后乘出来是50,也就是1个0
x=y,比如2个2,2个5,最后乘出来是100,也就是2个0
易知最后0的个数=min(x,y)
代码如下
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int i=0;
int x=0;
int y=0;
int arr[100]={5650,4542, 3554, 473, 946, 4114 ,3871, 9073, 90, 4329,
2758, 7949, 6113, 5659, 5245, 7432, 3051, 4434, 6704, 3594,
9937, 1173, 6866, 3397, 4759, 7557 ,3070, 2287, 1453, 9899,
1486 ,5722, 3135, 1170, 4014, 5510, 5120, 729, 2880, 9019,
2049, 698, 4582, 4346, 4427, 646, 9742, 7340, 1230, 7683,
5693, 7015, 6887, 7381, 4172, 4341, 2909, 2027, 7355, 5649,
6701 ,6645, 1671, 5978, 2704, 9926, 295, 3125, 3878, 6785,
2066 ,4247, 4800, 1578, 6652, 4616, 1113, 6205, 3264, 2915,
3966 ,5291 ,2904 ,1285, 2193, 1428 ,2265 ,8730 ,9436, 7074,
689,5510 ,8243, 6114, 337, 4096, 8199 ,7313 ,3685, 211 };
for(i=0;i<100;i++)
{
int tmp=arr[i];//后面还需要用到arr[i],所以防止数据被破坏,这里用临时变量获取到arr[i],我们使用tmp
while(tmp%2==0)//看是否能被2分解,如果可以,获取分解得到2的个数
{
x++;
tmp/=2;
}
tmp=arr[i];
while(tmp%5==0)//看是否能被5分解
{
y++;
tmp/=5;
}
}
printf("%d",x>y?y:x);
return 0;
}