50分 求大佬帮忙看看,万分感谢!
查看原帖
50分 求大佬帮忙看看,万分感谢!
586077
Ac_Fun楼主2022/2/5 17:20
#include <iostream>
#include <cstring>
using namespace std;

int a[120], b[120], c[120], ans[120];		// 用a[]表示 b[]表示(i-1)! c[]表示i*(i-1)! ans[]记录结果
int main() {
	int n, m = 1;
	int lena, lenb = 1, lenc = 1;
	scanf("%d", &n);
	b[1] = 1;
	for (int i = 1; i <= n; i++) {
		lena = 0;								
		int p = i;
		while (p > 0) {
			a[++lena] = p % 10;
			p /= 10;
		}
		for (int j = 1; j <= lena; j++) {
			for (int k = 1; k <= lenb; k++) {	//得到i*(i-1)!的值
				c[j + k - 1] = a[j] * b[k];
			}
		}
		lenc = lena + lenb;
		for (int j = 1; j < lenc; j++) {
			if (c[j] >= 10) {
				c[j + 1] += c[j] / 10;
				c[j] %= 10;
			}
		}
		m = max(m, lenc);
		for (int j = 1; j <= m; j++) {
			ans[j] += c[j];
		}
		for (int j = 1; j < m; j++) {
			if (ans[j] >= 10) {
				ans[j + 1] += ans[j] / 10;
				ans[j] %= 10;
			}
		}
		lenb = lenc;
		for (int j = 1; j <= lenc; j++) {
			b[j] = c[j];
		}
		for (int i = 0; i < 120; i++) {
			c[i] = 0;
		}

	}

	while (ans[m] == 0 && m != 1) 
	{
		m--;					//去前导0
	}
	for (int i = m; i >= 1; i--) 
	{
		printf("%d", ans[i]);
	}

	return 0;
}
2022/2/5 17:20
加载中...