洛谷P1009 [NOIP1998 普及组] 阶乘之和
题目链接:https://www.luogu.com.cn/problem/P1009
很水的一道题,无非是高精度乘法(高低乘)和高精度加法的结合体罢了,我的前一篇博客有高精度四件套,不会的可以去参考,思路都是一样的;
注意事项及代码如下:
#include<bits/stdc++.h> using namespace std; int a[110];//用来储存阶乘结果 110是假设位数,可能不够,不够再添即可 int b[110];//用来储存求和结果 void cheng(int *a,int x) { int jw=0;//两个进位 for(int i=1;i<=110;i++) { a[i]=a[i]*x+jw; jw=a[i]/10; a[i]=a[i]%10; } } void add(int *a,int *b) { int jw=0;//同上 for(int i=1;i<=110;i++) { b[i]=a[i]+b[i]+jw; jw=b[i]/10; b[i]=b[i]%10; } } int main() { int n; scanf("%d",&n); a[1]=1;//从1开始 for(int i=1;i<=n;i++)//每次循环阶乘,求和 { cheng(a,i); add(a,b); } bool flag=0;//判断前导,如果是0就不输出,所以一开始定义为0,假设前导都是0 for(int i=110;i>=1;i--) { if(b[i]!=0) flag=1;//bool逻辑判段 if(flag==1) printf("%d",b[i]);//如果满足条件,输出即可 } return 0; }
本文来自博客园,作者:江上舟摇,转载请注明原文链接:https://www.cnblogs.com/LQS-blog/p/15885123.html