我写了一个高精模板程序,有问题,没进入main函数就爆栈
  • 板块学术版
  • 楼主LaoXu666
  • 当前回复5
  • 已保存回复5
  • 发布时间2023/1/11 13:18
  • 上次更新2023/10/24 04:45:39
查看原帖
我写了一个高精模板程序,有问题,没进入main函数就爆栈
520777
LaoXu666楼主2023/1/11 13:18

代码

#include <algorithm>
#include <iostream>
#include <string>

typedef unsigned long long ULL;
typedef long long LL;

class BigNumber {
	public:
		std::string InputStr;
		ULL Num[1000005] { };
		ULL Tmp[1000005] { };
		ULL Size { };

		void Input( ) {
			std::cin >> InputStr;
			Size = InputStr.size( );
			for (ULL i = 0, j = Size - 1; i < Size; i++, j--) {
				Num[i] = InputStr[j] - '0';
			}
		}

		friend BigNumber operator+(const BigNumber &A, const BigNumber &B) {
			BigNumber Result;
			Result.Size = std::max(A.Size, B.Size);
			Result.Num[0] = (A.Num[0] + B.Num[0]) % 10;
			Result.Tmp[0] = (A.Num[0] + B.Num[0]) / 10;
			for (ULL i = 1; i < Result.Size; i++) {
				Result.Num[i] = (A.Num[i] + B.Num[i] + Result.Tmp[i]) % 10;
				Result.Tmp[i + 1] = (A.Num[i] + B.Num[i] + Result.Tmp[i]) / 10;
				Result.Tmp[i] = 0;
			}
			if (Result.Tmp[Result.Size] != 0) {
				Result.Num[Result.Size] = Result.Tmp[Result.Size];
				Result.Tmp[Result.Size] = 0;
				Result.Size++;
			}
			return Result;
		}

		BigNumber operator-(const BigNumber &B) {
			BigNumber Result;
			return Result;
		}

		BigNumber operator*(const int &B) {
			BigNumber Result;
			return Result;
		}

		BigNumber operator/(const int &B) {
			BigNumber Result;
			return Result;
		}

		friend bool operator==(const BigNumber &A, const BigNumber &B) {
			if (A.Size != B.Size) return false;
			for (ULL i = 0; i < B.Size; i++) {
				if (A.Num[i] != B.Num[i]) return false;
			}
			return true;
		}

		friend bool operator>(const BigNumber &A, const BigNumber &B) {
			if (A.Size < B.Size) return false;
			for (LL i = LL(B.Size) - 1; i >= 0; i--) {
				if (A.Num[i] < B.Num[i]) return false;
				if (A.Num[i] > B.Num[i]) return true;
			}
			return false;
		}

		friend bool operator>=(const BigNumber &A, const BigNumber &B) {
			return (A == B || A > B);
		}

		friend bool operator<=(const BigNumber &A, const BigNumber &B) {
			return !(A > B);
		}

		friend bool operator<(const BigNumber &A, const BigNumber &B) {
			return !(A >= B);
		}

};

void Print(const BigNumber &A) {
	for (LL i = LL(A.Size) - 1; i >= 0; i--) {
		std::cout << A.Num[i] << '\n';
		std::cout << i << '\n';
	}
	std::cout << '\n';
}

BigNumber A;
BigNumber B;

int main( ) {
	std::cout << "1\n";
	while (true) {
		char C;
		std::cin >> C;
		if (C == 'q') break;
		A.Input( );
		B.Input( );
		Print(A + B);
		std::cout << (A > B) << '\n' << (A >= B) << '\n' << (A == B) << '\n' << (A <= B) << '\n' << (A < B) << '\n';
	}
	return 0;
}

环境

Windows 10,MinGW,CLion,C++14

问题

请问因为什么原因出错了?

2023/1/11 13:18
加载中...