【算法】100阶乘

#include <stdio.h>

int main() {
    int n;
    int a[1000]; //确保保存最终运算结果的数组足够大
    int digit = 1; //位数
    int temp;   //阶乘的任一元素与临时结果的某位的乘积结果
    int i, j, carry; //进位

    printf("please input n:");
    scanf("%d", &n);
    a[0] = 1;   //将结果先初始化为1

    for (i = 2; i <= n; i++) { //开始阶乘,阶乘元素从2开始依次"登场"
        //按最基本的乘法运算思想来考虑,将临时结果的每位与阶乘元素相乘
        for (j = 1, carry = 0; j <= digit; j++) { //carry:进位
            temp = a[j - 1] * i + carry; //相应阶乘中的一项与当前所得临时结果的某位//相乘(加上进位)
            a[j - 1] = temp % 10; //更新临时结果的位上信息
            carry = temp / 10; //看是否有进位
        }
        while (carry) {    //如果有进位
            a[++digit - 1] = carry % 10; //新加一位,添加信息。位数增1
            carry = carry / 10; //看还能不能进位
        }
    }
    printf("n ! = ");    //显示结果
    for (j = digit; j >= 1; j--) {
        printf("%d", a[j - 1]);
    }
    printf("\n");
    return 0;
}
Tags:none

著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
原文作者:liwiki
原文标题:【算法】100阶乘
原文链接:https://blog.dicuu.com/default/261.html

上一篇
打赏
下一篇

该页面评论已关闭