清华大学---N的阶乘(大数运算)

题目描述
输入一个正整数N,输出N的阶乘。
输入描述:
正整数N(0<=N<=1000)
输出描述:
输入可能包括多组数据,对于每一组输入数据,输出N的阶乘
示例1
输入

4
5
15
输出

24
120
1307674368000


分析:大数运算是一个老生畅谈,常谈常新的话题。
关于大数阶乘,自以为以下这篇博文讲得不错
https://blog.csdn.net/lisp1995/article/details/52403507

以下是我这题通过的代码:

#include <stdio.h>
int main(){

    int a[20001];//储存每一位所得到的数
    int temp,digit,n,i,j=0;
    while(scanf("%d",&n)!=EOF){
        a[0]=1;//从1开始乘
        digit=1;//位数从第一位开始
        for(i=2;i<=n;i++){
            int num=0;
            for(j=0;j<digit;j++){   //从低位到高位
                temp=a[j]*i+num;//将一个数的每一位利用数组进行存储
                a[j]=temp%10;//将一个数的每一位利用数组进行存储
                num=temp/10;
            }
            while(num){ //判断退出循环后,num的值是否为0
                a[digit]=num%10;//继续存储
                num=num/10;
                digit++;
            }
        }
        for(i=digit-1;i>=0;i--)
            printf("%d",a[i]);
        printf("\n");
    }

    return 0;
}

猜你喜欢

转载自blog.csdn.net/rytyy/article/details/80491553