P1009 阶乘之和 luogu

来源:互联网 发布:wamp改mysql密码 编辑:程序博客网 时间:2024/06/16 22:53

题目描述

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

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

输入输出格式

输入格式:

一个正整数N。

输出格式:

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

输入输出样例

输入样例#1:
3
输出样例#1:
9










简单的高精度加法和乘法。微笑高级精度实现就是模拟人摆竖式

代码如下:


#include<iostream>#define MAX 1000using namespace std;int main(void){long long sum[MAX]={0},node[MAX]={0};int n,size1=1,size2=0,i,j,k;cin>>n;for(i=1;i<=n;i++){for(j=1;j<=MAX;j++)  node[j]=0;node[1]=1;size2=1;for(j=1;j<=i;j++){for(k=1;k<=size2;k++)node[k]*=j;for(k=1;k<=size2;k++)if(node[k]>9){if(k==size2)  size2++;node[k+1]+=node[k]/10;node[k]%=10;}}for(k=1;k<=size2;k++){sum[k]+=node[k];}if(size2>size1)  size1=size2;for(k=1;k<=size1;k++)if(sum[k]>9){if(k==size1)  size1++;sum[k+1]+=sum[k]/10;sum[k]%=10;}}for(i=size1;i>=1;i--)cout<<sum[i];return 0;}




0 0
原创粉丝点击