样例已过,全WA,求debug
查看原帖
样例已过,全WA,求debug
1058410
Gcc_Gdb_7_8_1楼主2024/7/30 17:43

自己写的高精度算法,全WA。(甚至写了class,QwQ

#include <bits/stdc++.h>
using namespace std;

namespace ggdb781
{
	class BigInt
	{
		private:
			int num2[100010];
		public:
			BigInt() {
				num2[0] = 1;
			}
			BigInt(int num) {
				int lenn = 0;
				while (num) {
					num2[++lenn] = num % 10;
					num /= 10;
				}
				num2[0] = lenn;
			}
			~BigInt() {
				memset(num2, 0, sizeof(num2));
			}
			friend ostream& operator<<(ostream& out, BigInt num);
			BigInt operator+(BigInt rhs) {
				BigInt res(0);
				res.num2[0] = max(num2[0], rhs.num2[0]);
				int x = 0;
				for (int i = 1; i <= res.num2[0]; ++i) {
					res.num2[i] = num2[i] + rhs.num2[i] + x;
					x = res.num2[i] / 10;
					res.num2[i] %= 10;
				}
				if (x > 0) {
					res.num2[++res.num2[0]] = x;
				}
				while (res.num2[0] > 1 && res.num2[res.num2[0]] == 0) {
					--res.num2[0];
				}
				return res;
			}
			BigInt operator*(int rhs) {
				BigInt res(0);
				int x = 0;
				res.num2[0] = num2[0];
				for (int i = 1; i <= res.num2[0]; ++i) {
					res.num2[i] = num2[i] * rhs + x;
					x = res.num2[i] / 10;
					res.num2[i] %= 10;
				}
				if (x > 0) {
					res.num2[++res.num2[0]] = x;
				}
				while (res.num2[0] > 1 && res.num2[res.num2[0]] == 0) {
					--res.num2[0];
				}
				return res;
			}
	};
	ostream& operator<<(ostream& out, BigInt num) {
		for (int i = num.num2[0]; i >= 1; --i) {
			out << num.num2[i];
		}
		return out; 
	}
}

using namespace ggdb781;

int main()
{
	int num;
	cin >> num;
	BigInt ans(0);
	for (int i = 1; i <= num; i++) {
		BigInt tmp(1);
		for (int j = 1; j <= i; j++) {
			tmp = tmp * j;
		}
		ans = ans + tmp;
	} 
	cout << ans << endl;
	return 0;
}
2024/7/30 17:43
加载中...