10000的阶乘是几位数?我们知道,阶乘的结果随着N的增长速度非常快,在C语言中,由于数值范围原因,普通乘法运算无法计算大数字的阶乘,那么如果想要计算100,1000,10000或更大的数的阶乘,C语言能处理吗?答案自然是没问题。
下面给出C语言实现大数的阶乘算法程序:
// Author: 乐者为王(http://www.doforfun.net/)
// 计算思想:将十进制数换成万进制数计算
// 用一个short数组来存储计算结果
// 每一个short代表一个万进制数的位
{
int i, j, m;
int top = 0;
short f[10000];
if (n > 10000)
{
printf("少来,1万还不够!自己写\n");
return;
}
memset(f, 0, sizeof(f));
// 循环计算阶乘
for (i=1; i<=n; i++)
{
short carry = 0; // 进位数值
for (j=0; j<top; j++)
{
m = f[j]*i + carry;
f[j] = m%10000;
carry = m/10000;
}
// 进位
if (carry > 0)
{
f[j] = carry;
top++;
}
// 初始化
if (top == 0)
{
f[0] = 1;
top = 1;
}
}
// 输出结果
printf("Result of (%d)! is:\n", n);
FILE *fp = fopen("result.txt", "wb");
fprintf(fp, "top: (%d)\n", top);
fprintf(fp, "Result of (%d)! is:\n", n);
for (i=top-1; i>=0; i--)
{
printf("%04d, ", f[i]);
fprintf(fp, "%04d, ", f[i]);
}
fclose(fp);
}
10000的阶乘是几位数?答案是35660位。具体结果如下:
2846, 2596, 8091, 7054, 5189, 0641, 3212, 1198, 6889, 0148, 0514, 0170, 2799, 2307, 9417, 9994, 2744, 1134, 0003, 7644, 4377, 2990, 7867, 5778, 4775, 8158, 8406, 2142, 3175, 2883, 0042, 3399, 4015, 3518, 7390, 5242, 1161, 3827, 1617, 4819, 8241, 9982, 7592, 4182, 8925, 9787, 8981, 2425, 3120, 5946, 5996, 2598, 6706, 5601, 6157, 2036, 0323, 9792, 6328, 7367, 1705, 5741, 9759, 6209, 9479, 7203, 4615, 3698, 1198, 9709, 2611, 2775, 0048, 4198, 8454, 1047, 5544, 6424, 4213, 6573, 3030, 7670, 3628, 8258, 0354, 8967, 4611, 1709, 7369, 5786, 0367, 0191, 0715, 1273, 0587, 2810, 4115, 8640, 5612, 8116, 5385, 3259, 6842, 5825, 9955, 8468, 8146, 4304, 2558, 9836, 6493, 1705, 9251, 7172, 0427, 6597, 4074, 4613, 3400, 0541, 9405, 2462, 3034, 3686, 9154, ..........
原创文章:10000的阶乘是几位数?附C语言程序计算程序,计算结果 (Eric.H.Sento)