前面通过小母牛的例子已经说过这个问题,这里再举一个例子:
题目:从1连续乘到100,积的末尾有几个0?
第一种思路,纯编程:
这里引入大数运算库,直接把结果求出来,然后数0。
import console;
import math.bignum
var bignum=math.bignum(1)
for (i=2;100){
bignum*=i
}
var numstr=tostring(bignum,10)
var zeros=string.match(numstr,"0+$")
console.log(#zeros)
console.pause(true);
结果是24。
第二种思路,先分析,后编程:
从1乘到100,相当于把每个数先进行因数分解,然后再让这些因数彼此相乘。积的末尾有多少个0,取决于这些因数里有多少个2和5的组合。由于2是足够多的,所以这些因数里有多少个5,结果末尾就有多少个0。这样,我们只要关心每个数里有几个因数5就行了。
import console;
var n=0
for(i=5;100;5){
if i%25=0 n+=2 //25的倍数包含2个因数5
else n++//包含1个因数5
//100以内的数不可能包含3个因数5
}
console.log(n)
console.pause(true);
结果也是24。
第一种方法好处是不用动脑筋。第二种方法好处是程序运行快。
当然,从通用性来说,第一种方法差一些,如果是1连乘到200,即使用大数运算,也出不来结果了。