首页 > 其他分享 >信息学一本通 1173:阶乘和

信息学一本通 1173:阶乘和

时间:2022-09-03 11:58:19浏览次数:59  
标签:信息学 slen jin 10 int ++ alen 阶乘 1173

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

提交数: 16559     通过数: 8405

【题目描述】

用高精度计算出S=1!+2!+3!+…+n!(n≤100)S=1!+2!+3!+…+n!(n≤100),其中“!!”表示阶乘,例如:5!=5×4×3×2×15!=5×4×3×2×1。

输入正整数nn,输出计算结果SS。

【输入】

一个正整数nn。

【输出】

计算结果SS。

【输入样例】

5

【输出样例】

153
信息学奥赛学习资料

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

#include<iostream>

#include<cmath>

#include<cstring>

using namespace std;

const int maxn = 1e5 + 5;

int n;

int a[maxn] = {0,1},s[maxn];

int num = 1,alen = 1,jin = 1,slen = 1;

int i,j;

int main(){

    ios::sync_with_stdio(0);

    cin >> n;

    for(i = 1; i <= n; i++){

        for(j = 1; j <= alen; j++)

            a[j] *= num;

        for(j = 1; j <= alen; j++) {

            if (a[j] >= 10) {

                a[j + 1] += a[j] / 10;

                a[j] %= 10;

                jin++;

            }

        }

        alen++;

        while(a[alen] >= 10){

            a[alen + 1] = a[alen] / 10;

            a[alen] %= 10;

            alen++;

            jin++;

        }

        num++;

        slen = max(slen,alen);

        for(j = 1; j <= slen; j++){

            s[j] += a[j];

            if(s[j] >= 10){

                if(j == slen) slen++;

                s[j + 1] += s[j] / 10;

                s[j] %= 10;

            }

        }

        alen = jin;

    }

    for( i = slen; i > 1; i--){

        if(s[i])

            break;

    }

    for(j = i; j>= 1; j--)

        cout << s[j];

    return 0;

}

  

标签:信息学,slen,jin,10,int,++,alen,阶乘,1173
From: https://www.cnblogs.com/sd129/p/16652277.html

相关文章

  • 信息学一本通 1174:大整数乘法
    时间限制:1000ms      内存限制:65536KB提交数:21350   通过数:11922【题目描述】求两个不超过200位的非负整数的积。【输入】有两行,每行是......
  • 信息学一本通 1175:除以13
    时间限制:1000ms      内存限制:65536KB提交数:16826   通过数:9935【题目描述】输入一个大于0的大整数N,长度不超过100位,要求输出其除以13得到的......
  • 信息学奥赛一本通 1168:大整数加法
     时间限制:1000ms      内存限制:65536KB提交数:72955   通过数:24357【题目描述】求两个不超过200位的非负整数的和。【输入】有两行,每......
  • 信息学奥赛一本通 1169:大整数减法
    时间限制:1000ms      内存限制:65536KB提交数:35546   通过数:20249【题目描述】求两个大的正整数相减的差。【输入】共2行,第1行是被减数a,......
  • 信息学一本通 1170:计算2的N次方
    时间限制:1000ms      内存限制:65536KB提交数:25947   通过数:13824【题目描述】任意给定一个正整数N(N<=100),计算2的n次方的值。【输入】......
  • 信息学奥赛一本通 1172:求10000以内n的阶乘
    时间限制:1000ms      内存限制:65536KB提交数:34265   通过数:10018【题目描述】求<spanid="MathJax-Span-2"class="mrow"><spanid="MathJax......
  • 信息学一本通 1004:字符三角形
    时间限制:1000ms      内存限制:66536KB提交数:160605   通过数:88949【题目描述】给定一个字符,用它构造一个底边长5个字符,高3个字符的等腰字符......
  • 信息学一本通 1005:地球人口承载力估计
    时间限制:1000ms      内存限制:65536KB提交数:113684   通过数:64422【题目描述】假设地球上的新生资源按恒定速度增长。照此测算,地球上现有资......
  • 信息学一本通 1307:【例1.3】高精度乘法
    时间限制:1000ms      内存限制:65536KB提交数:47439   通过数:17996【题目描述】输入两个高精度正整数M和N(M和N均小于100位)。求这两个高精度数......
  • 信息学一本通 1308:【例1.5】高精除
    时间限制:1000ms      内存限制:65536KB提交数:14866   通过数:7293【题目描述】高精除以高精,求它们的商和余数。【输入】输入两个低于300位......