Java 蓝桥杯 算法训练 ALGO_157_阶乘末尾

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

猜你喜欢

转载自blog.csdn.net/DAurora/article/details/109002305