15:阶乘和

15:阶乘和

总时间限制: 
1000ms

内存限制: 
65536kB
描述

用高精度计算出S=1!+2!+3!+…+n!(n≤50)

其中“!”表示阶乘,例如:5!=5*4*3*2*1。

输入正整数N,输出计算结果S。

输入
一个正整数N。
输出
计算结果S。
样例输入
5
样例输出
153
来源
NOIP1998复赛 普及组 第二题

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<cstring>
 5 using namespace std;
 6 int a[10001]={1};
 7 int ans[100001]={0};
 8 char n[1001];
 9 int en[1001];
10 int lans=1;
11 int la=1;
12 int x;
13 int main()
14 {
15     int n;
16     cin>>n;
17     int x=0;
18     for(int i=1;i<=n;i++)//寻找每一个数
19     {
20         memset(a,0,sizeof(a));
21         a[0]=1;
22         for(int k=1;k<=i;k++)//求阶乘
23         {
24             for(int j=0;j<la;j++)
25             {
26                 a[j]=a[j]*k+x;
27                 x=a[j]/10;
28                 if(x>0&&j==la-1)
29                 la++;
30                 a[j]=a[j]%10;
31             }
32
33         }
34         int l=0;
35              x=0;
36             while(l<=la||l<=lans)
37             {
38                 ans[l]=ans[l]+a[l]+x;
39                 x=ans[l]/10;
40                 if(x>0)
41                 lans++;
42                 ans[l]=ans[l]%10;
43                 l++;
44             }
45     }
46     int flag=0;
47     for(int i=lans;i>=0;i--)
48     {
49         if(ans[i]==0&&flag==0)
50         continue;
51         else flag=1;
52         cout<<ans[i];
53     }
54     return 0;
55 }

时间: 2024-10-10 04:37:23

15:阶乘和的相关文章

1-5阶乘

#include "stdafx.h" int main() { int temp=5; int temp2=1; int temp3; int temp4=0; for(int i=1;i<=5;i++) { temp3 = temp2; temp2 = temp2*(i+1); printf("%d*%d=%d\n",temp3,i+1,temp2); temp4+=temp2; } printf("%d\n",temp4); retu

大数阶乘(100!)

#include<"stdafx.h"int main(){ const int MAX = 10000;int carry_ = 0; //进位int temp = 1; //乘积int Num[MAX] = { 0 }; //保存的数int Num_n = 1; //数组下标计数Num[0] = 1; //数组第一位保存 1 for (int i =2,nLoc=0;i<=100;i++) //从2开始相乘{ temp=0,carry_=0; //小表初始化 乘积初始化

整理小朋友在noi.openjudge上的作业(1)

NOI(题库正在建设中,做题纪录有可能会被删除,请注意) 第一章的统计放前面 1 编程基础之输入输出 10 0 0% 最基础有空补刷 2 编程基础之变量定义.赋值及转换 10 0 0% 最基础有空补刷 3 编程基础之算术表达式与顺序执行 20 0 0% 最基础有空补刷 4 编程基础之逻辑表达式与条件分支 21 0 0% 最基础有空补刷 5 编程基础之循环控制 45 10 22% 最基础有空补刷 6 编程基础之一维数组 15 5 33% 最基础有空补刷 7 编程基础之字符串 35 0 0% 有必要

高精度进阶

目录 计算\(2^N\) 大整数因子 计算\(n!\) 阶乘和 1 OPJ1.6.12 计算\(2^N\) 描述 任意给定一个正整数\(N(N\le 100)\),计算2的n次方的值. 输入 输入一个正整数\(N\). 输出 输出\(2^N\)的值. 样例输入 5 样例输出 32 #include <cstdio> #include <algorithm> #include <cstring> #include <cmath> #include <io

浅谈康托展开和其逆运算

康托展开,是一种在\(\mathcal{O}(n^2)\)(\(n\)为排列元素个数)时间复杂度求解某一排列在全排列中的次序的算法. 我们以一道例题引入: 排列的序号 题目描述: 给定一个数\(n\)和一个\(n\)个数的排列\(a\),求\(a\)在\(n\)的全排列中的序号. 输入描述: 第一行一个整数\(n\),第二行一个排列\(a\). 输出描述: 求\(a\)在\(n\)的全排列中的序号. 输入输出样例: 输入 3 123 输出 1 数据范围 \(n\le 15\) 根据排列组合.加法

浙大版《C语言程序设计(第3版)》题目集 习题2-6 求阶乘序列前N项和 (15 分)

习题2-6 求阶乘序列前N项和 (15 分) 本题要求编写程序,计算序列 1!+2!+3!+? 的前N项之和. 输入格式: 输入在一行中给出一个不超过12的正整数N. 输出格式: 在一行中输出整数结果. 输入样例: 5 输出样例: 153 思路:利用函数阶乘累加. 代码如下: #include <stdio.h> long factorial(long n); int main() { long n; scanf("%ld",&n); printf("%l

7-49 求前n项的阶乘之和 (15 分)

从键盘输入一个整数n,求前n项的阶乘之和,1+2!+3!+...+n!的和 输入格式: 输入一个大于1的整数.例如:输入20. 输出格式: 输出一个整数.例如:2561327494111820313. 输入样例: 在这里给出一组输入.例如: 20 输出样例: 在这里给出相应的输出.例如: 2561327494111820313 def f(n): ans = 1 for i in range(1,n+1): ans *= i return ans n = int(input()) sum = 0

1003 阶乘后面0的数量

1003 阶乘后面0的数量 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 n的阶乘后面有多少个0? 6的阶乘 = 1*2*3*4*5*6 = 720,720后面有1个0. Input 一个数N(1 <= N <= 10^9) Output 输出0的数量 Input示例 5 Output示例 1其实只要循环除五就可以找到规律,其实也可以证明出来. 1 #include <iostream> 2 #include <cstdio> 3 #

关于阶乘

描述:给定两个数n,m,其中m是一个素数. 将n(0<=n<=2^31)的阶乘分解质因数,求其中有多少个m. 注:^为求幂符号. 输入: 第一行是一个整数s(0<s<=100),表示测试数据的组数 随后的s行, 每行有两个整数n,m. 输出: 输出m的个数 样例输入 3 100 5 16 2 1000000000 13 样例输出 24 15 83333329 当n,m体量很小的时候,用这个代码就可以AC: 1 #include <iostream> 2 using na