10000的阶乘是几位数?附C语言程序计算程序,计算结果

10000的阶乘是几位数?我们知道,阶乘的结果随着N的增长速度非常快,在C语言中,由于数值范围原因,普通乘法运算无法计算大数字的阶乘,那么如果想要计算100,1000,10000或更大的数的阶乘,C语言能处理吗?答案自然是没问题。

下面给出C语言实现大数的阶乘算法程序:

// Author: 乐者为王(http://www.doforfun.net/)
// 计算思想:将十进制数换成万进制数计算
// 用一个short数组来存储计算结果
// 每一个short代表一个万进制数的位

void  factorial( short  n)
ExpandedBlockStart.gifContractedBlock.gif
{
    
int i, j, m;
    
int top = 0;
    
short f[10000];

    
if (n > 10000)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
{
        printf(
"少来,1万还不够!自己写\n");
        
return;
    }

    
    memset(f, 
0sizeof(f));
    
// 循环计算阶乘
    for (i=1; i<=n; i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
{        
        
short carry = 0// 进位数值
        for (j=0; j<top; j++)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
            m 
= f[j]*+ carry;
            f[j] 
= m%10000;
            carry 
= m/10000;
        }

        
// 进位
        if (carry > 0)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
            f[j] 
= carry;
            top
++;
        }

        
// 初始化
        if (top == 0)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
            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--)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
{
        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)     

转载于:https://www.cnblogs.com/szfs/archive/2009/04/16/1437008.html

你可能感兴趣的:(10000的阶乘是几位数?附C语言程序计算程序,计算结果)