我是靠谱客的博主 冷傲猫咪,最近开发中收集的这篇文章主要介绍阶乘和(C++实现)[NOIP1998P2]阶乘和,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

[NOIP1998P2]阶乘和

【时间限制】:1000ms    【内存限制】:65535KB

题目描述

用高精度计算出S=1!+2!+3!+…+n!(n≤50) 其中“!”表示阶乘,例如:5!=5*4*3*2*1。 输入正整数N,输出计算结果S。

输入格式

输入正整数N

输出格式

输出计算结果S

样例输入

6

样例输出

873

本体虽然思路简单易想,但实际上代码实现对于初学者并不简单,在掌握高精度算法的同时要求对实际运算有较清晰的逻辑思维。(但毕竟小学生题,这么说才不是为了给自己做了半小时才ac找借口,哼╭(╯^╰)╮)

代码如下

#include<iostream>
using namespace std;
int a[1010],jc[1010];
int al,cl;
void mul(int x)//阶乘,jc=jc*x
{
cl=cl+2;
for(int i=0;i<cl;i++)//先相乘
jc[i]=jc[i]*x;
for(int i=0;i<cl;i++)//再进位
{
jc[i+1]+=jc[i]/10;
jc[i]%=10;
}
while(cl>1&&jc[cl-1]==0)//去除前导零
cl--;
}
void add()//相加 ,a=a+jc
{
al=max(al,cl);//求长度
for(int i=0;i<al;i++)//先相加
a[i]=a[i]+jc[i];
for(int i=0;i<al;i++)//再进位
{
a[i+1]+=a[i]/10;
a[i]%=10;
}
while(al>1&&a[cl-1]==0)//去除前导零
al--;
}
int main()
{
cl=al=1;//赋值
jc[0]=1;
int n;
cin>>n;
for(int i=1;i<=n;i++)//int版阶乘和形式,不改变原本基本运算逻辑,只将其改变为高精度算法
{
mul(i);
add();
}
for(int i=al-1;i>=0;i--)//输出a
{
cout<<a[i];
}
return 0;
} 

 


            来源 [NOIP1998P2]

                                        (被嘲讽小学生题都做不出来,卑微笨仔在线补题)

最后

以上就是冷傲猫咪为你收集整理的阶乘和(C++实现)[NOIP1998P2]阶乘和的全部内容,希望文章能够帮你解决阶乘和(C++实现)[NOIP1998P2]阶乘和所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(42)

评论列表共有 0 条评论

立即
投稿
返回
顶部