Java 蓝桥杯 算法训练 ALGO_157_阶乘末尾
问题描述
给定n和len,输出n!末尾len位。
输入格式
一行两个正整数n和len。
输出格式
一行一个字符串,表示答案。长度不足用前置零补全。
样例输入
6 5
样例输出
00720
数据规模和约定
n<=30, len<=10。
/**
@author Mingxu_Deng
@version 2020-10-9下午09:28:02
问题描述
给定n和len,输出n!末尾len位。
输入格式
一行两个正整数n和len。
输出格式
一行一个字符串,表示答案。长度不足用前置零补全。
样例输入
6 5
样例输出
00720
数据规模和约定
n<=30, len<=10。
*/
import java.math.BigInteger;
import java.util.Scanner;
public class ALGO_157_阶乘末尾 {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int n = s.nextInt(), len = s.nextInt();
BigInteger count = BigInteger.ONE;
for(int i=1;i<=n;i++){//用 for 循环计算出 n!
/*
* 调用 String 类中的 valueOf 方法,将 i 类型转换为 BigInteger 型
* 作为参数传给 BigInteger 类的 multiply 方法进行乘法运算
*/
count=count.multiply(new BigInteger(String.valueOf(i)));
}
String str = String.valueOf(count);//要进行字符串操作,必须先把 BigInteger型转换为 String 型
//接下来就是输出
if(str.length()==len){//如果 str 的长度刚好等于 len,直接打印输出
System.out.println(str);
}else{//若 str 的长度小于 len 则添零,若 str 的长度大于 len 则输出 len 长的即可。
if(str.length()<len){
String z ="0";
for(int i=1;i<Math.abs(len-str.length());i++){
//Math.abs():因为len及str的长度大小关系不可预见,故可直接取绝对值
z +="0";
}
System.out.println(z+str);
}else{
/*
public String substring(int beginIndex,int endIndex)返回一个新字符串,
它是此字符串的一个子字符串。该子字符串从指定的 beginIndex 处开始,
直到索引 endIndex - 1 处的字符。因此,该子字符串的长度为 endIndex-beginIndex。
*/
System.out.println(str.substring(str.length()-len, str.length()));
}
}
}
}
大家也可以参考参考前辈的代码:
https://blog.csdn.net/qq_39536716/article/details/83041565