CSP-S/J 信息学1172:求10000以内n的阶乘-信息学一本通(c++)

感情迁移 提交于 2020-02-08 17:40:21

CSP-SJ信息学资料下载
时间限制: 1000 ms 内存限制: 65536 KB
提交数: 13351 通过数: 3373
【题目描述】
求10000以内n的阶乘。

【输入】
只有一行输入,整数n(0≤n≤10000)。

【输出】
一行,即n!的值。

【输入样例】
4
【输出样例】
24
【来源】

No

代码如下:
#include<iostream>
#include<cstring>
using namespace std;
int n,y,i;
int a[100000],ay[100000];

int main()
{
    cin>>n;
    a[0]=1;   //高精度数的位数 
    a[1]=1;   //高精度整数1(逆向存储,位数放在数组第0个元素) 
    for(y=1;y<=n;y++)
    {
        memset(ay,0,sizeof(ay));
        ay[0]=a[0];
        for (i=1;i<=a[0];i++)
        {
          ay[i]+=a[i]*y;
          ay[i+1]=ay[i]/10;  //向高位进位 
          ay[i]%=10;
        }
        while(ay[ay[0]+1]>0)  //向高位进位 
        {
            ay[ay[0]+2]=ay[ay[0]+1]/10;
            ay[ay[0]+1]%=10;
            ay[0]++;
        }
        for(i=1;i<=ay[0];i++) a[i]=ay[i];
        a[0]=ay[0];
    }
    for(i=a[0];i>=1;i--) cout<<a[i];
    cout<<endl;
    return 0;
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!