题目:求一个数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.最后进行打印就大功告成了啦!