c++ 大整数的实现

#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const short MAX=200;//要想数据范围更大就修改这个
struct BigInt{
    //可以自己加一个符号位
    short len;
    char numbers[MAX+1];
};
BigInt add(BigInt a,BigInt b){//竖式计算,小学内容
    BigInt s;
    memset(s.numbers,'0',sizeof(s.numbers));
    s.len=max(a.len,b.len);
    for(int i=MAX;i>MAX-s.len;i--){
        int x=s.numbers[i]-'0'+a.numbers[i]-'0'+b.numbers[i]-'0';
        if(x>=10){
            s.numbers[i-1]++;
            x-=10;
        }
        s.numbers[i]=x+'0';
    }
    if(s.numbers[MAX-s.len]!='0') s.len++;//判断是否进位
    return s;
}
BigInt subtraction(BigInt a,BigInt b){
    BigInt s;
    memset(s.numbers,'0',sizeof(s.numbers));
    s.len=max(a.len,b.len);
    for(int i=MAX;i>MAX-s.len;i--){
        int x=s.numbers[i]-'0'+a.numbers[i]-b.numbers[i];
        if(x<0){
            s.numbers[i-1]--;
            x+=10;
        }
        s.numbers[i]=x+'0';
    }
    while(s.numbers[MAX-s.len+1]=='0') s.len--;
    return s;
}
int main(){
    BigInt a,b,c;
    memset(a.numbers,'0',sizeof(a.numbers));//初始化非常重要!!!
    memset(b.numbers,'0',sizeof(b.numbers));
    cin>>a.len>>b.len;
    for(int i=MAX-a.len+1;i<=MAX;i++) cin>>a.numbers[i];
    for(int i=MAX-b.len+1;i<=MAX;i++) cin>>b.numbers[i];
    c=subtraction(a,b);
    //c=add(a,b);
    for(int i=MAX-c.len+1;i<=MAX;i++) cout<<c.numbers[i];
    return 0;
}

这个大整数是用char储存的,非常简单,就没写乘除了,原理就是竖式计算

其实有更高效的储存方式,使用unsighed int(2^32)的大数数组就比较好,大家可以自己试试

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值