系列文章目录
本系列文章是关于《ACM-ICPC算法竞赛基础算法》的文章!
题目介绍
零、求指定数字的阶乘
我们知道随着给定数字n的增大,n!的增长速度非常快,其增长速度高于指数的增长速度,
所以这是一个高精度计算问题。
代码运行测试结果:
# 一、代码如下:
import java.util.Scanner;
public class LargeIntegerFactorial {
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
long[] ans = new long[10001000];
long n = sc.nextLong();
ans[0] = 1;
int l = 0;
long num = 0;
for(int i = 1; i<=n;++i)
{
num = 0;
for(int j = 0; j <= l; j++)
{
num = num + ans[j] * i;
ans[j] = num % 10;
num /= 10;
}
while(num != 0)
{
ans[++l] =num % 10;
num /= 10;
}
}
for(int i = l; i >= 0; --i)
{
System.out.print(ans[i]);
}
return;
}
}
二、代码解析:
我们接下来把n设置为4,进行代码的实例演示以及解析
{
long[] ans = new long[10001000];//定义答案数组
n = 4;//设置指定数字为4
ans[0] = 1; //将答案数组的第一位设置为1
int l = 0;//定义变量l,用来记录n!的数字有多少位
long num = 0;//定义变量num
for(int i = 1; i<=n;++i)//核心代码,将在下边进行实例解析
{
num = 0;
for(int j = 0; j <= l; j++)
{
num = num + ans[j] * i;
ans[j] = num % 10;
num /= 10;
}
while(num != 0)
{
ans[++l] =num % 10;
num /= 10;
}
}
{
当i == 1时,j == 0, j <= l (0 <= 0), num = 0;
num = num + ans[0] * i = 0 + 1 * 1 = 1;
ans[0] = num % 10 = 1 % 10 = 1;
num = num / 10 = 1 / 10 = 0;
当i == 2时,j == 0,j <= l (0 <= 0),num = 0;
num = num + ans[0] * i = 0 + 1 * 2 = 2;
ans[0] = num % 10 = 2 % 10 = 2;
num = num / 10 = 2 / 10 = 0;
当i == 3时,j == 0,j <= l (0 <= 0),num = 0;
num = num + ans[0] * i = 0 + 2 * 3 = 6;
ans[0] = num % 10 = 6 % 10 = 6;
num = num / 10 = 6 / 10 = 0;
当i == 4时,j == 0,j <= l (0 <= 0),num = 0;
num = num + ans[0] * i = 0 + 6 * 4 = 24;
ans[0] = num % 10 = 24 % 10 = 4;
num = num / 10 = 24 / 10 = 2;
进入while循环,
num = 2 != 0;
ans[++l] = num % 10 = 2 % 10 = 2;(此时l == 1);
ans[1] = 2;
num = num / 10 = 2 / 10 = 0;
当i == 5时,j == 0,j <= l (0 <= 1),num = 0;
num = num + ans[0] * i = 0 + 4 * 5 = 20;
ans[0] = num % 10 = 20 % 10 = 0;
num = num / 10 = 2;
当i == 5时,j == 1,j <= l (1 <= 1),num = 2;
num = num + ans[1] * i = 2 + 2 * 5 = 12;
ans[1] = num % 10 = 12 % 10 = 2;
num = num / 10 = 12 / 10 = 1;
进入while循环,
num = 1 != 0;
ans[++l] = num % 10 = 1 % 10 = 1;(此时l == 2);
ans[2] = 1;
num = num / 10 = 0;
结束。
}
}
当n == 5时,代码运行结果如下:
总结
# 这段时间有点忙,不过博客会不断更新,希望给大家带来一些帮助!!!