Java求阶层(1-1000)之取末尾多少个0

题目:求一个数n的阶层,并且要求打印出这个数末尾有多少个0;n在区间[1,1000]

小编觉得这个题目拿起来就特别简单,不就求一个阶层算一下末尾有几个0而已嘛!然后看到取值范围的时候觉得这里是一个坑,因为求阶层的时候,如果求的数比较大时很容易就超出int型能承受的范围!(承受了它这个年纪不该承受的鸭梨呀)所以我们在定义的时候就不能用int,所以改为用BigInteger来定义!所以先别说废话,上代码吧。

import java.math.BigInteger;
import java.util.Scanner;
public class UpdataTest {
public static void main(String[] args) {
	String s = new Scanner(System.in).nextLine();
	//System.out.println(BigNumber(new BigInteger(s)).toString());
	String ch = BigNumber(new BigInteger(s)).toString();//取到阶层的字符
	int len = ch.length();//取字符的长度
	int count=0;//定义计数器
	for(int i=len-1;i>=0;i--){
		char a = ch.charAt(i);//取最后一位的字符
		if(a=='0') count++;
		else break;
	}
	System.out.println(count);
}
public static BigInteger BigNumber(BigInteger n){
	if(n.intValue()==1) return new BigInteger("1");
	
	BigInteger bt = new BigInteger("1");//设置bt的值为1 以便后面每次减1 然后递归
	BigInteger sb = n.subtract(bt);//使n每次减1赋值给sb
	return n.multiply(BigNumber(sb));	//相当于返回n*n-1
}
}

最后我们要求取末尾多少位0,也是比较容易理解的。由于这里时字符串,所以我们可以用charAt()方法来从最后一位往前面取,每取一位进行比较,一旦发现有一位不匹配就break.最后进行打印就大功告成了啦!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值