BigInteger(string numStr) { if (!isValidNumber(numStr)) { throwinvalid_argument("Invalid number format"); }
for (int i = numStr.length() - 1; i >= 0; i--) { digits.push_back(numStr[i] - '0'); } }
voidprint()const{ for (int i = digits.size() - 1; i >= 0; i--) { cout << digits[i]; } cout << endl; }
3. 加法运算
加法运算实现了两个BigInteger对象之间的加法操作:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
BigInteger operator+(const BigInteger &other) const { BigInteger result; int carry = 0; int i = 0;
while (i < digits.size() || i < other.digits.size() || carry) { int sum = carry; if (i < digits.size()) sum += digits[i]; if (i < other.digits.size()) sum += other.digits[i];
result.digits.push_back(sum % 10); carry = sum / 10;
BigInteger operator-(const BigInteger &other) const { if (*this < other) { throwinvalid_argument("Result is negative, subtraction not supported"); }
BigInteger result; int borrow = 0; int i = 0;
while (i < digits.size() || i < other.digits.size()) { int diff = borrow; if (i < digits.size()) diff += digits[i]; if (i < other.digits.size()) diff -= other.digits[i];
public: // 构造函数,接受字符串表示的数字 BigInteger(string numStr) { if (!isValidNumber(numStr)) { throwinvalid_argument("Invalid number format"); }
for (int i = numStr.length() - 1; i >= 0; i--) { digits.push_back(numStr[i] - '0'); } }
// 打印大整数 voidprint()const{ for (int i = digits.size() - 1; i >= 0; i--) { cout << digits[i]; } cout << endl; }
// 判断输入的数字是否合法 staticboolisValidNumber(const string &numStr){ for (char digit : numStr) { if (!isdigit(digit)) { returnfalse; } } returntrue; }
// 大整数加法 BigInteger operator+(const BigInteger &other) const { BigInteger result; int carry = 0; int i = 0;
while (i < digits.size() || i < other.digits.size() || carry) { int sum = carry; if (i < digits.size()) sum += digits[i]; if (i < other.digits.size()) sum += other.digits[i];
result.digits.push_back(sum % 10); carry = sum / 10;
i++; }
return result; }
// 大整数减法 BigInteger operator-(const BigInteger &other) const { if (*this < other) { throwinvalid_argument("Result is negative, subtraction not supported"); }
BigInteger result; int borrow = 0; int i = 0;
while (i < digits.size() || i < other.digits.size()) { int diff = borrow; if (i < digits.size()) diff += digits[i]; if (i < other.digits.size()) diff -= other.digits[i];