本文共 3427 字,大约阅读时间需要 11 分钟。
#include#include #include #include using namespace std;const int MAX = 110;class CHugeInt {private: char c[200]; public: // 将字符串反转 void reverse(char *a) { int i = 0, j = strlen(a) - 1; while (i < j) { swap(a[i], a[j]); i++; j--; } } CHugeInt(const char* a) { int len; memset(c, 0, 200); strcpy(c, a); len = strlen(c); reverse(c); } CHugeInt(int n) { int len; memset(c, 0, 200); sprintf(c, "%d", n); len = strlen(c); reverse(c); } CHugeInt operator +(const CHugeInt &b) const { CHugeInt a(0); int lenb = strlen(b.c); int len = strlen(c); int lena; if (b.c[0] == '0' && lenb == 1) { return *this; } if (c[0] == '0' && len == 1) { strcpy(a.c, b.c); return a; } int j = 0; for (int i = 0; i < len || i < lenb; i++) { int x = 0; char c1 = c[i], c2 = b.c[i]; if (c[i] == 0) c1 = '0'; if (b.c[i] == 0) c2 = '0'; x = c1 - '0' + c2 - '0' + j; a.c[i] = (x % 10) + '0'; j = x / 10; } lena = len > lenb ? len : lenb; if (j != 0) { int a0 = len > lenb ? len : lenb; a.c[a0] = j + '0'; lena = a0 + 1; } return a; } CHugeInt operator +(int n) { return *this + CHugeInt(n); } friend CHugeInt operator +(int n, const CHugeInt &h) { return h + n; } CHugeInt& operator +=(int n) { *this = *this + CHugeInt(n); return *this; } friend CHugeInt& operator ++(CHugeInt &a) { a = a + 1; return a; } friend ostream& operator<<(ostream& o, const CHugeInt &a) { int len = strlen(a.c); for (int i = len - 1; i >= 0; --i) { o << a.c[i]; } return o; } friend CHugeInt operator ++(CHugeInt &a, int) { CHugeInt b = a; a = (b + 1); return b; }};int main() { char s[210]; int n; while (cin >> s >> n) { CHugeInt a(s); CHugeInt b(n); cout << a + b << endl; cout << n + a << endl; cout << a + n << endl; b += n; cout << ++b << endl; cout << b++ << endl; cout << b << endl; } return 0;}
类定义与成员变量
CHugeInt 类定义了一个字符数组 c 用于存储大整数的每一位数字。 构造函数
CHugeInt(const char* a):将输入字符串反转后赋值给 c。CHugeInt(int n):将输入整数转换为字符串并反转后赋值给 c。加法运算
operator + 方法实现了两数相加功能,支持 CHugeInt 与 CHugeInt 以及 CHugeInt 与 int 的加法运算。 进位处理
在加法运算中,逐位处理每一位数字并处理进位,确保结果的正确性。字符串反转
reverse 方法用于对字符串进行反转处理,确保数字存储的高低位正确。 输入输出操作
定义了operator<< 方法,用于将 CHugeInt 对象输出为字符串,确保输出顺序正确无误。 操作符重载
定义了+= 和 ++ 操作符,支持大整数的自增操作。 程序通过 cin 读取输入的两个非负整数 s 和 n,其中 s 最多可以有 200 位,n 则可以用 int 型表示。对于每组输入,程序输出六行结果,分别是:
a + b 的结果n + a 的结果a + n 的结果b += n 后的结果++b 的结果b 的最终结果99999999999999999999999999888888888888888812345678901234567789 126 6
999999999999999999999999998888888888888888123456789012345678019999999999999999999999999988888888888888881234567890123456780199999999999999999999999999888888888888888812345678901234567801252526121212131314
程序能够正确处理大整数的加法运算和自增操作,并输出预期结果。
转载地址:http://lvhv.baihongyu.com/