首页 > 其他分享 >洛谷刷题之P1009

洛谷刷题之P1009

时间:2024-09-04 22:23:01浏览次数:17  
标签:10 le 洛谷 P1009 50 long times 20 刷题

[NOIP1998 普及组] 阶乘之和

题目描述

用高精度计算出 S = 1 ! + 2 ! + 3 ! + ⋯ + n ! S = 1! + 2! + 3! + \cdots + n! S=1!+2!+3!+⋯+n!( n ≤ 50 n \le 50 n≤50)。

其中 ! 表示阶乘,定义为 n ! = n × ( n − 1 ) × ( n − 2 ) × ⋯ × 1 n!=n\times (n-1)\times (n-2)\times \cdots \times 1 n!=n×(n−1)×(n−2)×⋯×1。例如, 5 ! = 5 × 4 × 3 × 2 × 1 = 120 5! = 5 \times 4 \times 3 \times 2 \times 1=120 5!=5×4×3×2×1=120。

输入格式

一个正整数 n n n。

输出格式

一个正整数 S S S,表示计算结果。

样例 #1

样例输入 #1

3

样例输出 #1

9

提示

【数据范围】

对于 100 % 100 \% 100% 的数据, 1 ≤ n ≤ 50 1 \le n \le 50 1≤n≤50。

【其他说明】

注,《深入浅出基础篇》中使用本题作为例题,但是其数据范围只有 n ≤ 20 n \le 20 n≤20,使用书中的代码无法通过本题。

如果希望通过本题,请继续学习第八章高精度的知识。

NOIP1998 普及组 第二题

分析

这道题我们会发现 1 ≤ n ≤ 50 1 \le n \le 50 1≤n≤50明显会爆 l o n g   l o n g long\ long long long,所以我们需要用高精度来做这道题目

Code

#include<bits/stdc++.h>

using namespace std;

int main()
{
    int i,A[1005]={0},B[1005]={0},n,j;
    scanf("%d", &n);
    A[0]=B[0]=1;
    for (i=2;i<=n;i++){
        for (j=0;j<100;j++)
            B[j]*=i;
        for (j=0;j<100;j++)
            if (B[j]>9){
                B[j+1] += B[j]/10;
                B[j]%=10;
            }
        for (j=0;j<100;j++){
            A[j]+=B[j];
            if (A[j]>9) {
                A[j+1] += A[j]/10;
                A[j]%=10;
            }
        }
    }
    for (i=100;i>=0&&A[i]==0;i--);
    for (j=i;j>=0;j--) printf("%d", A[j]);
    return 0;
}

标签:10,le,洛谷,P1009,50,long,times,20,刷题
From: https://blog.csdn.net/resco/article/details/141905697

相关文章

  • 洛谷刷题之P1226
    【模板】快速幂题目描述给你三个整数a,b,pa,b,p......
  • 洛谷 P2515 软件安装
    洛谷P2515软件安装题意现在我们的手头有\(N\)个软件,对于一个软件\(i\),它要占用\(W_i\)的磁盘空间,它的价值为\(V_i\)。我们希望从中选择一些软件安装到一台磁盘容量为\(M\)计算机上,使得这些软件的价值尽可能大(即\(V_i\)的和最大)。但是现在有个问题:软件之间存在依赖......
  • 洛谷 P3119 Grass Cownoisseur G
    洛谷P3119GrassCownoisseurG题意约翰有\(n\)块草场,编号\(1\)到\(n\),这些草场由若干条单行道相连。奶牛贝西是美味牧草的鉴赏家,她想到达尽可能多的草场去品尝牧草。贝西总是从\(1\)号草场出发,最后回到\(1\)号草场。她想经过尽可能多的草场,贝西在通一个草场只吃一次......
  • 洛谷 P9912 Zatopljenje
    洛谷P9912Zatopljenje题意给出长度为\(n\)的序列\(a\),有\(q\)次询问。每次给出\(l,r,x\),询问区间\([l,r]\)中有多少段极长的,\(a\)都大于\(x\)的段。思路离线后扫描线。先把询问和\(a\)离散化,然后扫描\(a\)的值。维护序列\(b\),初始全为\(1\)。扫描从\(......
  • 洛谷 P5340 大中锋的游乐场
    洛谷P5340大中锋的游乐场题意给出一张\(n\)个点\(m\)条边的图,每个点有一个点权\(1\)或\(-1\)。给出点\(s,t\),求出\((s,t)\)间满足以下条件的最短路。任意时刻,走过的路径上点权和均\(\in[-k,k]\)。思路分层图最短路。\(dis_{i,j}\)表示走到\(i\),点权和为\(j......
  • 洛谷 B3645 数列前缀和 2 题解
    前缀知识:枚举,费马小定理,逆元,线性乘法逆元,线段树(?)。解法1:暴力如题。暴力枚举即可,30分。由于太简单,不给代码。解法2:前缀积+费马小定理+逆元由于涉及静态区间,可以想到前缀积。前缀积公式为\(q_r/q_{l-1}\),除法恰好可以用逆元来算。直接写即可。不会超时,因为时间为\(O(n\logp)\)......
  • 力扣刷题--13. 罗马数字转整数【简单】
    题目描述罗马数字包含以下七种字符:I,V,X,L,C,D和M。字符数值I1V5X10L50C100D500M1000例如,罗马数字2写做II,即为两个并列的1。12写做XII,即为X+II。27写做XXVII,即为XX+V+II。通常情况下,罗马数字中小的数字在大的数字的右边。但......
  • 力扣刷题--1837.K进制表示下的各位数字总和【简单】
    题目描述......