C代码 求100的阶乘

思考:100!的结果是非常大的,超出了基本数据的表示范围的结果。所以,我们需要寻找一种能正确地表达出这么大整数的方法。如果我们把100!的结果当做是一个字符串的话,那么数组或者指针是可以正确表达出来100!的结果。下面的代码我是使用数组来存储100!的结果。下面的代码也就是把数组的每一位元素与要求的阶乘的数相乘加上上一次的商的尾数(求余)赋值给数组对应的下标元素。

#include <stdio.h>

void multiply(int num[], int iIndex, int iFactor)
{
    int iCarry = 0;
    for(int i = 0; i < iIndex; i++)
    {
        int iProduct = num[i] * iFactor + iCarry;
        num[i] = iProduct % 10;
        iCarry = iProduct / 10;
    }

    while(iCarry > 0)
    {
        num[iIndex] = iCarry % 10;
        iCarry /= 10;
        iIndex++;
    }
}

int main()
{
    int iCount = 100;
    int ciResult[1000] = {0};
    int iIndex = 1;//当前使用数组小标的大小
    ciResult[0] = 1;
    
    for(int i = 2; i <= iCount; i++)
    {
        multiply(ciResult, iIndex, i);
        iIndex++;
    }

    for(int i = iIndex - 1; i >= 0; i--)
    {
        printf("%d", ciResult[i]);
    } 
    printf("\n");
    return 0;
}

运行结果

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值