蒟蒻求助 dalao们看看我哪里错了?
查看原帖
蒟蒻求助 dalao们看看我哪里错了?
235561
samzhangjy楼主2021/1/13 20:24

我是直接用书里的高精加和高精乘打上去自己又团成一块的,但是不知道为什么到9的时候就溢出(?)了,往后也都是405853,但是我觉得我数组已经开的够大的了。。 来自蒟蒻的求助,请各位dalao解答。

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int a[101], b[101], c[10001], ans[10001];
long long lena, lenb, lenc, lenans = 1, x;

int main() {
	int n;
	scanf("%d", &n);
	b[1] = 1, lenc = 1, lenb = 1, lena = 1;
	for (int i = 1; i <= n; i++) {
		x = 0;
		int tmp = i, cnt = 0;
		while (tmp) {
			if (i > 10) lena = 2;
			else lena = 1;
			a[lena - cnt] = tmp % 10;
			tmp /= 10, cnt++;
		}
//		for (int j = lena; j >= 1; j--) printf("%d", a[j]);
//		printf("\n");
		for (int j = 1; j <= lena; j++) {
			x = 0;
			for (int k = 1; k <= lenb; k++) {
				c[j + k - 1] = a[j] * b[k] + x + c[j + k - 1];
				x = c[j + k - 1] / 10;
				c[j + k - 1] %= 10;
//				cout<<"C: "<<c[j + k - 1]<<endl;
			}
			c[j + lenb] = x;
		}
		lenc = lena + lenb, x = 0;
//		cout<<"C After: ";
//		for (int j = lenc; j >= 1; j--) printf("%d", c[j]);
//		printf("\n");
		for (int j = 1; j <= lenc; j++) b[j] = c[j];
		lenb = lenc;
		memset(c, 0, sizeof(c));
		while (ans[lenans] == 0 && lenans > 1) lenans--;
		while (lenans <= lenb) {
			ans[lenans] = ans[lenans] + b[lenans] + x;
			x = ans[lenans] / 10;
			ans[lenans] %= 10, lenans++;
		}
		x ? ans[lenans] = x : lenans--;
	}
	while (ans[lenans] == 0 && lenans > 1) lenans--;
	for (int i = lenans; i >= 1; i--) printf("%d", ans[i]);
	printf("\n");
	return 0;
}

本蒟蒻将万分感激!!

2021/1/13 20:24
加载中...