解题思路:
对题目和数字分析可知:需要计算乘积之后0的个数,直观简单的方法就是将所有的数字乘起来再计算,但由于数字较大,不便于保存,所以放弃这条思路。
我们可以观察到:数字的 0 可以由 2 和 5 相乘得到(4,6,8,10…都可以转换成2的倍数),并且数字之间做乘法时,我们也可以将其分为n个2*m个5,所以我们可以将问题转换为:计算所有数字中2 和 5 的个数,最后输出 最少的个数,而不用将每个数字相乘!
代码如下:
#include<stdio.h>
#define MAXSIZE 100
int main(){
long num[MAXSIZE]; //用于存储数字
int i,count_5=0,count_2=0;
for( i=0 ; i<MAXSIZE ; i++)
scanf("%ld",&num[i]);
for( i=0 ; i<MAXSIZE ; i++ ){
while ( num[i]%2 == 0 ) //计算num[i]中有多少个2
{
num[i] /= 2;
count_2 += 1;
}
while ( num[i]%5 == 0 ) //计算num[i]中有多少个5
{
num[i] /= 5;
count_5 += 1;
}
}
printf( "%d" , count_2 < count_5 ? count_2 : count_5 ); //注意:最后输出的是最小的个数
return 0;
}
*如有不妥,请多多指教! *