首页 > 编程学习 > 信息学奥赛一本通 1172:求10000以内n的阶乘

时间限制: 1000 ms         内存限制: 65536 KB

提交数: 34265     通过数: 10018

【题目描述】

<span id="MathJax-Span-2" class="mrow"><span id="MathJax-Span-3" class="mn">1000010000以内<span id="MathJax-Span-5" class="mrow"><span id="MathJax-Span-6" class="mi">nn的阶乘。

【输入】

只有一行输入,整数<span id="MathJax-Span-8" class="mrow"><span id="MathJax-Span-9" class="mi">nn(<span id="MathJax-Span-11" class="mrow"><span id="MathJax-Span-12" class="mn">0<span id="MathJax-Span-13" class="mo">≤<span id="MathJax-Span-14" class="mi">n<span id="MathJax-Span-15" class="mo">≤<span id="MathJax-Span-16" class="mn">100000≤n≤10000)。

【输出】

一行,即<span id="MathJax-Span-18" class="mrow"><span id="MathJax-Span-19" class="mi">n<span id="MathJax-Span-20" class="mo">!n!的值。

【输入样例】

4

【输出样例】

24

更多信息学奥赛学习资料

链接:https://pan.baidu.com/s/1IBH3uj7OdE6gx16RYxZCtw?pwd=ip6d
提取码:ip6d

#include<iostream>
#include<cstring>
#define N 100010
using namespace std;
int n,a[N],lena=1;
int main(){
    cin>>n;
    a[0]=1;
    for(int k=2;k<=n;k++){
        for(int i=0;i<lena;i++)a[i]*=k;
        for(int i=0;i<lena;i++){
            if(a[i]>9){
                a[i+1]+=a[i]/10;
                a[i]%=10;
                if(i==lena-1)lena++;
            }
        }
    }
    for(int i=lena-1;i>=0;i--)cout<<a[i];
    cout<<endl;
}

  

Copyright © 2010-2022 mfbz.cn 版权所有 |关于我们| 联系方式|豫ICP备15888888号