代码编织梦想

问题描述
  输入一个正整数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
 

解题思路:

             首先必须明确一点无论是Java基本类型Long,还是C\C++的Long Long类型,都是无法满足1000的阶乘的,所以我们可以用数组或Java提供的Bigintger中的类实现(这里用数组来实现)。首先需要我们需要知道一个数乘以n等于这个数的每一个位数乘以n再乘以其10多少次位相加。例如

24*5 = 2*10¹+4*5;按照这个思路我们即可以创建一个数组从低位到高位来表示一个高精度数。将高精度数num乘以一个整数k变为将数组Num的每一个元素都乘以k,请注意处理相应的进位。
首先将a设为1,然后乘2,乘3,当乘到n时,即得到了n!的值。

      

源代码:


import java.util.Scanner;

public class n的阶乘 {

    static  int[] num = new int[10000];    //装高精度数字的数组

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        num[1] = 1;
        int n=sc.nextInt();
        Factorial(n);
    }

    public static void Factorial(int n){
        int x=1;
        for(int i = 2;i <= n; i++){     //n的阶乘
            int temp = 0;
            for(int j = 1;j <= x;j++){   //每一位数都乘以n
                int t = num[j] * i + temp;
                num[j] = t % 10;
                temp = t / 10;
            }
            while(temp > 0){       
                num[++x] = temp %10;
                temp /= 10;
            }
        }
        while(x > 0){
            System.out.print(num[x]);
        }
    }

}

题解:

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zsl20200217/article/details/128006595

基础练习 阶乘计算-爱代码爱编程

问题描述   输入一个正整数n,输出n!的值。   其中n!=1*2*3*…*n。 算法描述   n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法。使用一个数组A来表示一个大整数a,A[0]表示a的个位,A[1]表示a的十位,依次类推。   将a乘以一个整数k变为将数组A的每一个元素都乘以k,

求n的阶乘问题。输入一个正整数n,输出n!__james_xue_的博客-爱代码爱编程

/*求阶乘问题。 输入一个正整数n,输出n!*/ #include <stdio.h> //编译预处理命令 int factorial(int n);

蓝桥杯:阶乘计算_tianyi_1998的博客-爱代码爱编程

蓝桥杯:基础练习 阶乘计算 看到阶乘我的第一反应肯定是用递归进行计算,但是我还忘了蓝桥杯经常出那种变态数据,所以我毫无意外的落坑了;仔细看了一下题目,竟然还有提示,那就按照提示的来做,贴代码: #include<iostream> using namespace std; //在网上查到1000的阶乘位数,这里要特别注意,如果设置太大会直接造成

蓝桥杯:基础练习 阶乘计算-爱代码爱编程

问题描述   输入一个正整数n,输出n!的值。   其中n!=123*…*n。   算法描述   n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法。使用一个数组A来表示一个大整数a,A[0]表示a的个位,A[1]表示a的十位,依次类推。   将a乘以一个整数k变为将数组A的每一个元素都乘以k,请注意处理相应的进位。   首先将a设为1,

Java计算n的阶乘-爱代码爱编程

利用Java提供的biginteger类进行Java大整数的运算 public class n的阶乘 { public static void main(String[] args) { //n的阶乘就是1*2*3...*n;-->把1换成sum得出公式sum=sum*1.....sum*n //我用的是for循环运算公式

Java-输入一整数n(n>=1),然后将随后输入的n个整数存入一整型数组;-爱代码爱编程

题目: 输入一整数n(n>=1),然后将随后输入的n个整数存入一整型数组; 显示该整型数组所有元素; 然后删除数组中多余的重复元素,重复数组元素中只保留第一个元素, 比如数组中存在3个整数5,下标分别为2,9和12, 则删掉下标为9和12的元素,后面元素顺次前移。 最后显示已删除多余的重复元素的整型数组所有元素。 package arr; impo

Java中求N的阶乘-爱代码爱编程

递归求阶乘 Java中1-n的累加和 分析: 阶乘:所有小于及等于该数的正整数的积。 n的阶乘:n! = n * (n-1) … 3 * 2 * 1 n-1的阶乘:(n-1)! = (n-1) … 3 * 2 * 1 … 1的阶乘: 1!= 1 n的阶乘: n! = n * (n-1)! 代码实现: public static void ma

蓝桥杯 阶乘计算 高精度加法(Java)-爱代码爱编程

1.题目描述 输入一个正整数n,输出n!的值。 其中n!=123*…*n。 算法描述 n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法。 使用一个数组A来表示一个大整数a,A[0]表示a的个位,A[1]表示a的十位,依次类推。 将a乘以一个整数k变为将数组A的每一个元素都乘以k,请注意处理相应的进位。 首先将a设为1,然后乘2,乘3,

java计算n的阶乘的程序_【java】计算N的阶乘-爱代码爱编程

public BigInteger Nstate(int n) { // long result=1; /* for(int i=1;i result*=n; } return result;*/ BigInteger result = new BigInteger("1");//超过30!应该使用BigInteger for (int

Java-使用BigInteger求阶乘-爱代码爱编程

BigInteger可以用来表示任意大小和精度的整数,用new BigInterger(String)来创建BigInteger的实例。通过使用add、mulitiple、divide等来进行运算. import java.math.BigInteger; public class MultiplyCheck { public static B

Java求n以内所有整数之和_java编程!!用户从键盘输入一个整数n,程序求出n的累加和并输出。(如:1+2+3+4+……+n)...-爱代码爱编程

…这写自己编就行啊…为什么不自己编变看呢www.mh456.com防采集。 使用for循环即可5261,代码如下:import java.util.Scanner;public class Demo07 {public static void main(String[] args) {System.out.println("请输入你4102要求和的数

java阶乘计算高精度_阶乘和 (高精度运算)-爱代码爱编程

描述 用高精度计算出S=1!+2!+3!+…+n!(n≤50),其中“!”表示阶乘,例如:5!=5×4×3×2×1。 输入正整数n,输出计算结果S。 格式 输入格式 一个正整数n。 输出格式 计算结果S。 样例 输入样例 5 输出样例 153 限制 时间限制:1000 ms 内存限制:65536 KB 题目其实很简单的,

蓝桥杯 基础练习 阶乘计算(C语言)-爱代码爱编程

阶乘计算 问题描述   输入一个正整数n,输出n!的值。   其中n!=123*…*n。算法描述   n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法。使用一个数组A来表示一个大整数a,A[0]表示a的个位,A[1]表示a的十位,依次类推。   将a乘以一个整数k变为将数组A的每一个元素都乘以k,请注意处理相应的进位。   首先将a设

算法训练 阶乘--蓝桥杯-爱代码爱编程

算法训练 阶乘 描述 问题描述 一个整数n的阶乘可以写成n!,它表示从1到n这n个整数的乘积。阶乘的增长速度非常快,例如,13!就已经比较大了,已经无法存放在一个整型变量中;而35!就更大了,它已经无法存放在一个浮点型变量中。因此,当n比较大时,去计算n!是非常困难的。幸运的是,在本题中,我们的任务不是去计算n!,而是去计算n!最右边的那个非0的数字

数据结构实验--大数运算之计算n的阶乘 (n≥20)-爱代码爱编程

一、问题描述 大数运算——计算n的阶乘 (n≥20)。 【基本要求】 (1)数据的表示和存储: ①累积运算的中间结果和最终的计算结果的数据类型要求是整型——这是问题本身的要求。 ②试设计合适的存储结构,要求每个元素或结点最多存储数据的3位数值。(2)数据的操作及其实现:基于设计的存储结构实现乘法操作,要求从键盘上输入n值;在屏幕上显示最终计算结果。【

Java应用之阶乘求和-爱代码爱编程

一起来学习Java鸭! Hello!星辰今天带来的是阶乘求和,走过路过不要错过,来看一看这个程序该怎么写呢?如果对小可爱你有帮助的话,支持一下星辰,给星辰点个赞呗! import java.util.Scanner; public class FactorialTest { public static void main(String[] arg

蓝桥杯 基础练习 阶乘计算-爱代码爱编程

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

【十三届蓝桥杯真题】求阶乘 --- 数学解法思考与尝试-爱代码爱编程

🚀写在前面 Hello大家好😋,我是秋刀鱼🐟,一只活跃于Java区与算法区的新人博主~ 欢迎大家加入高校算法学习社区: https://bbs.csdn.net/forums/Suanfa,社区里大佬云集,大家互相交流学习! 蓝桥杯比赛终于告一段落了,感谢这一路上付出的你🧡。这道求阶乘题目是今天较难的一道题目,这