原题链接:信息学奥赛一本通T1173-阶乘和
参考代码:
#include<iostream> #include<cstring> using namespace std; void add(int[], int[], int[]); void multiply(int, int[], int[]); void print(int[]); void clear(int[]); #define N 1000 int sum[N]; int fn[N]; int t[N]; int main() { int n; cin >> n; fn[0] = 1; for(int i = 1; i <= n; i++) { add(fn, sum, t); multiply(i + 1, fn, t); } print(sum); return 0; } void add(int a[], int b[], int c[]) { clear(c); for(int i = 0; i < N; i++) { c[i] += a[i] + b[i]; if(c[i] >= 10) { c[i + 1] += c[i] / 10; c[i] %= 10; } } memcpy(b, c, sizeof(int) * N); } void multiply(int a, int b[], int c[]) { clear(c); for(int i = 0; i < N; i++) { c[i] += a * b[i]; if(c[i] >= 10) { c[i + 1] += c[i] / 10; c[i] %= 10; } } memcpy(b, c, sizeof(int) * N); } void print(int arr[]) { int i = N - 1; while(i > 0 && arr[i] == 0) i--; for( ; i >= 0; i--) putchar(arr[i] + '0'); putchar('\n'); } void clear(int arr[]) { for(int i = 0; i < N; i++) arr[i] = 0; }
0.0分
6 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复