#include <iostream> // 要用cin、cout? #include <string> ? // 要用string类? #include <cstring> ?// 要用strlen? #include <cstdio> ? // 要用sprintf? using namespace std; ? const int maxn = 2000;?? ?// 大整数的最高位数限制? ? struct bign{ ? ? int d[maxn], len; ? ?? ?// 去掉大数的前导0? ?? ?void clean() { while(len > 1 && !d[len-1]) len--; } ? ?? ?// 初始化:默认初始化为值0? ? ? bign() { memset(d, 0, sizeof(d)); len = 1; } ? ?? ? ? // 初始化:可以用“bign [bign] = [int];”或“bign [bign]([int]);” ? ? bign(int num) { *this = num; } ? ?? ? ? // 初始化:可以用“bign [bign] = [char*];”或“bign [bign](char*);” ? ? bign(char* num) { *this = num; } ? ?? ? ? // 赋值:可以用“[bign] = [char*];”? ? ? bign operator = (const char* num){ ? ? ? ? len = strlen(num); ? ? ? ? for(int i = 0; i < len; i++) d[i] = num[len-1-i] - '0'; ? ? ? ? clean(); ? ? ? ? return *this; ? ? } ? ?? ? ? // 赋值:可以用“[bign] = [int];”? ? ? bign operator = (int num){ ? ? ? ? char s[maxn]; ? ? ? ? sprintf(s, "%d", num); ? ? ? ? *this = s; ? ? ? ? return *this; ? ? } ? ?? ?// 将int数组存储的值转换为高精度的字符串形式? ? ? string str() const{ ? ? ? ? string res; ? ? ? ? for(int i = 0; i < len; i++) res = char(d[i]+'0') + res; ? ? ? ? return res; ? ? } }; ? // 可以用“cin >> [bign];”的方式输入? istream& operator >> (istream& in, bign& x) { ? ? string s; ? ? in >> s; ? ? x = s.c_str(); ? ? return in; } ? // 可以用“cout << [bign];”的方式输出? ostream& operator << (ostream& out, const bign& x) { ? ? out << x.str(); ? ? return out; }
|