试题 算法训练 阶乘末尾
问题描述
给定n和len,输出n!末尾len位。
样例输入
6 5
样例输出
00720
本题要使用大数进行计算,不然会错一半的数据。所以使用BigInteger进行操作。
代码
import java.util.*;
import java.math.BigInteger;
public class Ajiecheng {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
BigInteger sum = new BigInteger("1");
for(int i=1;i<=n;i++) {
BigInteger sum1 = new BigInteger(i+""); //将i转成BigInteger类型的。才能和sum相乘
sum = sum.multiply(sum1); //sum乘i
}
String s = sum+"";
int c = s.length();
//第一种情况是,最后阶乘的结果位数大于等于要输出的位数,那么输出要求的位数即可
if(c>=m) {
System.out.print(s.substring(c-m)); //得到从c-m到最后的字符串,就是结果了
}
//第二种情况就是,长度没有要输出的那么长,需要用0来补齐。先输出0,在直接输出sum就好了
else {
for(int i=0;i<m-c;i++) {
System.out.print(0);
}
System.out.print(s);
}
}
}