蓝桥杯VIP试题 之 基础练习 阶乘计算 - JAVA

举报
陈言必行 发表于 2021/08/13 23:15:56 2021/08/13
【摘要】 问题描述:   输入一个正整数n,输出n!的值。   其中n!=123*…*n。    算法描述:   n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法。使用一个数组A来表示一个大整数a,A[0]表示a的个位,A[1]表示a的十位,依次类推。   将a乘以一个整数k变为将数组A的每一个元素都乘以k,请注意处理相应的进位。   首先将a设为1,然后乘2...

问题描述:
  输入一个正整数n,输出n!的值。
  其中n!=123*…*n。
  
算法描述:
  n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法。使用一个数组A来表示一个大整数a,A[0]表示a的个位,A[1]表示a的十位,依次类推。
  将a乘以一个整数k变为将数组A的每一个元素都乘以k,请注意处理相应的进位。
  首先将a设为1,然后乘2,乘3,当乘到n时,即得到了n!的值。
  
输入格式:
  输入包含一个正整数n,n<=1000。
输出格式:
  输出n!的准确值。
  
样例输入
10
样例输出
3628800

import java.util.Scanner;

/*
 * 基础练习 阶乘计算
 * n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法。
 * 使用一个数组A来表示一个大整数a,A[0]表示a的个位,A[1]表示a的十位,依次类推。
 * 将a乘以一个整数k变为将数组A的每一个元素都乘以k,请注意处理相应的进位。
 * 首先将a设为1,然后乘2,乘3,当乘到n时,即得到了n!的值。
*/
public class Main {
	public static void main(String[] args) { Scanner sc = new Scanner (System.in); int n=sc.nextInt(); int A[]=new int [9999]; A[0]=1; for(int j=1;j<=n;j++) { //计算乘法 for(int i=0;i<A.length-1 ;i++) { A[i]=A[i]*j; } //计算进位 for(int i=0;i<A.length-1 ;i++) { A[i+1]=A[i+1]+(A[i]/10); A[i]=A[i]%10; } } //输入10输出看下结果 //--> 00882630000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 /* for(int j=0;j<=100;j++) { System.out .print(A[j]); } */ //右上结果可以看出,找出倒数第一个非0位,然后逆向输出即是结果 int index=0; for(int i=A.length-1;i>=0 ;i--) { if(A[i]!=0) { index=i;//非0的倒数第一个位的数组索引 break; } } //逆向输出结果 for(int i=index; i>=0;i--) { System.out.print(A[i]); } }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50

测评结果

文章来源: czhenya.blog.csdn.net,作者:陈言必行,版权归原作者所有,如需转载,请联系作者。

原文链接:czhenya.blog.csdn.net/article/details/104546793

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。