进击吧!阶乘

链接:https://www.nowcoder.com/acm/contest/75/E
来源:牛客网

题目描述

给定一个整数N(0≤N≤10000),求取N的阶乘

输入描述:

多个测试数据,每个测试数据输入一个数N

输出描述:

每组用一行输出N的阶乘

示例1
输入

1
2
3

输出

1
2
6

题解:用数组来存放阶乘值,具体看代码

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<iostream>
#include<algorithm>
using namespace std;
int a[1000000];//存放阶乘值的数组 
int main()
{
    int n,i,j,len=0,t=0;//n为要求阶乘的数, len是当前数字长度,t是所求过程中的溢出值 
    while(cin>>n)
    {
        memset(a,0,sizeof(a));
        t=0;
        len=1;//初始长度为1 
        a[0]=1; 
        for(i=2;i<=n;i++)
        {
            for(j=0;j<len;j++)//逐位求值 
            {
                int r=a[j]*i+t;
                t=r/10;//其他位数字为溢出值 
                a[j]=r%10;//该位所求值的最小位放入数组 
            }
            while(t)
            {
                a[len++]=t%10;//挨个取出溢出值中的最小位放入数组 
                t/=10;
            }
        }
        for(i=len-1;i>=0;i--)//存储过程中小位数存在数组前端,倒着输出 
        {
            cout<<a[i];
        }
        cout<<endl;
    }
return 0;
} 

猜你喜欢

转载自blog.csdn.net/csdn_muxin/article/details/79317210