加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

高精度大数 待

发布时间: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;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读