高精度大数 待
发布时间:2020-12-14 05:08:52 所属栏目:大数据 来源:网络整理
导读:最近开始复习基础聊: 若题目的大数 运算类型较少 可以直接用数组 若所需要的 运算类型较多 建议封装为大整数类 大整数类:模拟赋值、加法、 #include iostream #include cstdio #include cstring using namespace std; const int maxlen = 100 ;inline int
最近开始复习基础聊: 若题目的大数运算类型较少可以直接用数组 若所需要的运算类型较多建议封装为大整数类 大整数类:模拟赋值、加法、 #include <iostream> #include <cstdio> #include <cstring> using namespace std; const int maxlen = 100; inline int max(const int& a,const int& b) { return a>b ? a:b; } inline int min(const int& a,const int& b) { return a<b ? a:b; } //小位在前大位在后 struct BigNum { int len; int num[maxlen]; BigNum() { len = 0; memset(num,0,sizeof(num)); } BigNum operator = (const long long& b) { int it = 1; memset(this->num,0,sizeof(this->num)); num[it] = b; while(num[it] > 9) { num[it+1] = num[it]/10; num[it] %= 10; it += 1; } len = it; return *this; } BigNum operator = (const BigNum& b) { for(int i=1; i<=b.len; ++i) { this->num[i] = b.num[i]; } this->len = b.len; return *this; } BigNum operator + (const long long& b) { int it = 1; this->num[it] += b; while(num[it] > 9) { num[it+1] += num[it] / 10; num[it] %= 10; it += 1; } while(num[it]) it += 1; len = it-1; cout << len << endl; return *this; } BigNum operator + (BigNum b) { //让this指向更长的数,计算的时候更舒服 if(this->len < b.len) { BigNum tmp = *this; *this = b; b =tmp; } int i,ten = 0; for(i=1; i<=b.len; ++i) { num[i] += b.num[i] + ten; ten = num[i] / 10; num[i] %= 10; } num[i] += ten; while(num[i] > 9) { num[i+1] += num[i] / 10; num[i] %= 10; i += 1; } while(num[i]){ i += 1; } len = i-1; return *this; } }; int main() { BigNum bignum1,bignum2; bignum1 = 99; bignum2 = 988; bignum2 = bignum1 + bignum2; for(int i=bignum2.len; i>0; --i){ printf("%d",bignum2.num[i]); } return 0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |