📄 高精度阶乘.cpp
字号:
#include <stdio.h>
void main()
{
int x, A, B, M, N, a[500] = {0}, i, j, temp;
scanf("%d", &x);
if (!(x >= 0 && x <= 150))
return;
A = x;
M = -1;
while (A > 0)
{
M ++;
a[M] = A % 10;
A /= 10;
}
j = M;
while (x >= 3)
{
int b[500] = {0}, c[500][500] = {0}, d[500] = {0};
M = j;
x --;
B = x;
N = -1;
while (B > 0)
{
N ++;
b[N] = B % 10;
B /= 10;
}
for (i = 0;i <= N;i ++)
{
temp = 0;
for (j = 0;j <= M + N + 1;j ++)
{
if (j - i < 0) {c[i][j] = 0;temp = 0;continue;}
c[i][j] = (b[i] * a[j - i] + temp) % 10;
temp = (b[i] * a[j - i] + temp) / 10;
}
}
temp = 0;
for (j = 0;j <= M + N + 1;j ++)
{
for (i = 0;i <= N;i ++)
d[j] += c[i][j];
a[j] = (d[j] + temp) % 10;
temp = (d[j] + temp) / 10;
}
}
while (j >= 0)
{
if (a[j] != 0)
break;
j --;
}
printf("结果一共有%d位\n", j + 1);
while (j >= 0)
{
printf("%d", a[j]);
j --;
}
printf("\n");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -