[NOIP1998P2]阶乘和
【时间限制】:1000ms 【内存限制】:65535KB
题目描述用高精度计算出S=1!+2!+3!+…+n!(n≤50) 其中“!”表示阶乘,例如:5!=5*4*3*2*1。 输入正整数N,输出计算结果S。
输入格式输入正整数N
输出格式输出计算结果S
样例输入6样例输出
873
本体虽然思路简单易想,但实际上代码实现对于初学者并不简单,在掌握高精度算法的同时要求对实际运算有较清晰的逻辑思维。(但毕竟小学生题,这么说才不是为了给自己做了半小时才ac找借口,哼╭(╯^╰)╮)
代码如下#includeusing 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 1&&jc[cl-1]==0)//去除前导零 cl--; } void add()//相加 ,a=a+jc { al=max(al,cl);//求长度 for(int i=0;i1&&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<
来源 [NOIP1998P2]
(被嘲讽小学生题都做不出来,卑微笨仔在线补题)



