这个题不能硬做乘法啊,发这个大家看懂就会做啦
- /**
- * 需求:求1到1000乘积的0的个数
- * 思路:假设乘积结果是。。。。。000000000,每一个0就相当于乘与10,1到1000的乘积可以等同于将1到1000这些数字完全分解成质数再相乘
- * 1= 1*1
- * 2= 1*2
- * 3= 1*3
- * 4= 2*2
- * 5= 1*5
- * 6= 2*3
- * 。
- * 。
- * 10= 2*5
- * 11= 1*11
- * 12= 2*3*4
- * .
- * .
- * 15= 3*5
- * .
- * .
- * 20= 2*2*5
- * 。
- *
- * 25= 5*5。
- *
- * 1000= 2*2*2*5*5*5
- * 就是将上面的等号右边的所有数乘起来。我们知道乘积中出现一个10,就会多一个0.而10=2*5,只有2和5乘积才能等于10,其他所有的数的乘积都不等于10。
- * 不要说10*20也会有0,要知道我们已经将这些数字完全分解成了质数,所以只要求出上面等号右边能构造成多少个(2*5),明显可以看出2的个数多于5,所以
- * 我们只要求出5的个数就是(2*5)的个数,也就是乘积中10的个数,也就是要求的0的个数。
- * 怎么求5的个数,楼主的程序我也没看懂。不过我自己想了一种,大家看一下。
- * 1.首先只要5的倍数,分解的质数里才会包含5,即
- * 5 = 1*5
- * 10= 2*5
- * 15= 3*5
- * 20= 4*5
- * . .
- * . .
- * 1000=200*5
- * 上面的等号右边我们直观的可以看到已经有200个5,再求1到200分解成5的倍数
- * 5 = 1*5
- * 10= 2*5
- * 15= 3*5
- * 20= 4*5
- * . .
- * . .
- * 200= 40*5
- * 上面上面又有40个5,再求出1到40分解成5的倍数
- * 5 = 1*5
- * 10= 2*5
- * 15= 3*5
- * 20= 4*5
- * 。
- * 40= 8*5
- * 上面有8个5,再求1到8分解成5的倍数
- * 5= 1*5
- * 上面就1个5
- * 所以5的个数=200+40+8+1=249
- * 步骤:
- *
- * @author lhy
- *
- */
- public class Test8
- {
- public static void main(String[] args)
- {
- int num=0;//创建变量记录5的个数
- int z=1000;
-
- while(z>=5){
- num = z/5 +num;//第一次是200,第二次是40,第三次是8,其实都是除于5得到的
- z = z/5;
- }
- System.out.print(num);
- }
- }
复制代码 |