Java的数末尾至少有4个0对吗_[讨论]1*2*3*...*1000末尾有多说个连续的0?

是我孤陋寡闻了,我当时不知道BigInteger。我的本意是让用其他基本的方法算出来。原题是我在Baidu的Java吧里发现的。帖子总算没有白发,谢谢2楼让我又学到了BigInteger。

一下是我的算法:

/**

* 算法描述:

* 分解质因数,即:

* 1*2*3*...*1000 = (2*5)*(2*5)*...*(2*5)

*(没有匹配的2或5) //其实地球人都知道2肯定比5多

//这样其实只需要确定因子5的个数即可

*(除2和5以外的其他质因数)

* 其因子中有多少个(2*5)即末尾有多少个0

* 因此问题变成求每个数中2和5因子的个数,再求和

* 最后min(因子2个数的总和,因子5个数的总和)即是所求。

*/

public class SumZero {

SumZero(){

max = 1000;//默认值是1000

}

SumZero(int n){

max = n;//可以通过构造函数修改max的值

}

private int max;

/**

* 得到max的因子 m 的个数

*/

public int getFactor(int m){

int count = 0,

n = max;

//try 中的便是程序的核心

try{

while(n%m == 0){//能被m整除则count++

count++;

if(n >= m){

n /= m;

}

}

}

catch(Exception e){

e.printStackTrace();

}

return count;

}

/**

* 得到末尾0的个数

*/

public int getNumber(){

int count_2 = 0,//因子2的个数

count_5 = 0;//因子5的个数

for(int i = 1;i<=max;i++){

count_2 += getFactor(i,2);//其实没有必要求因子2的个数

count_5 += getFactor(i,5);

}

return Math.min(count_2,count_5);//必定有:count_5 < count_2

}

public static void main(String[] args){

System.out.println("1*2*...*1000的末尾有"

+new SumZero().getNumber()

+"个0");

}

}

原题在[URL=http://post.baidu.com/f?kz=53897730]这里[/URL]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值