100的阶乘实现方法(C语言)

对于c语言中100的阶乘,由于共计158位,远远超过long long,所以不能用直接计算,所以选用数组接收数据。

思路:

首先创建一个数组,
1、使它里面每一个元素为1,
2、设置进位坐标、此时记录进位坐标初始为1,进位要比当前位置高1,每次进位后使进位加1
3、令当前位置数据开始乘以从1开始递增到100的数列,
4、设置临时变量num接收相乘后的值,超过10部分取整记为carry(作为进位的数值), 小于十的部分取余记录为此时a[i]的值;
5、检测每次进位数值carry是否大于10,若大于10,超过10的部分要向前进位,小于10的部分才是此时的进位值,进位后对需要进位坐标加1

int main(int argc,const char* argv[])
{
    short a[256] = {1};
    int cnt = 1; //最高进位数
    for(int i=2; i<101; i++)
    {
        int carry = 0;  //进位数值
        for(int j=0; j<cnt; j++)
        {
            short num = a[j]*i + carry;
            a[j] = num%10;
            carry = num/10;
        }
        while(carry)
        {
            a[cnt++] = carry%10;    //首先使当前进位获得个位数值,再使下一位获得十位数值
            carry /= 10;    //控制循环次数,最多为两次
        }
    }
    while(cnt--)
    {
        printf("%d", a[cnt]);   //逆序输出a
    }
}

输出结果
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值