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

本文提供了一道蓝桥杯竞赛题目“输出n!末尾len位”的解决方案,采用Java语言实现,利用BigInteger处理大数运算,通过字符串操作截取并输出结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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.youkuaiyun.com/qq_39536716/article/details/83041565

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值