蓝桥杯--入门题--大数阶乘

蓝桥杯–入门题–大数阶乘
说实话,一个多月没coding,现在真的是啥都不会了,哎,连一个阶乘题都不会做了。
资源限制
时间限制:1.0s 内存限制:512.0MB
问题描述

输入一个正整数n,输出n!的值。
  其中n!=1*2*3**n。

算法描述

n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法。使用一个数组A来表示一个大整数a,A[0]表示a的个位,A[1]表示a的十位,依次类推。
  将a乘以一个整数k变为将数组A的每一个元素都乘以k,请注意处理相应的进位。
  首先将a设为1,然后乘2,乘3,当乘到n时,即得到了n!的值。

输入格式

输入包含一个正整数n,n<=1000

输出格式

输出n!的准确值。

样例输入

10

样例输出

3628800

思路:建立一个大的数组,一定要大,小了只能对一部分,这里开一个20000的数组就够用了。
代码:

#include<stdio.h>

int main()
{
    
    
    int n;
    scanf("%d",&n);

    int a[20000]={
    
    0};
    a[0]=1;

    int end=1;
    for(int i=2;i<=n;i++){
    
    
        int add=0;
        for(int j=0;j<end;j++){
    
    
            int index=a[j]*i;
            a[j]=(index+add)%10;
            add=(index+add)/10;
        }
        while(add){
    
    
            a[end++]=add%10;
            add/=10;
        }
    }
    for(int ii=end-1;ii>=0;ii--){
    
    
        printf("%d",a[ii]);
    }

    return 0;
}

猜你喜欢

转载自blog.csdn.net/timelessx_x/article/details/114444483