九度OJ-1198 高精度整数计算

本文介绍了一种处理超大数加法的方法,通过字符数组存储数字,并利用自定义结构体进行四位一组的数值提取、加法运算及进位处理。此方法避免了直接计算存储大数带来的不便。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



由于a、b数量过大,不能直接计算存储,故用数组进行模拟计算。


思路:

int main(int argc, char **argv)
{
    char a[1002],b[1002];
    while (cin>>a>>b) {
        aa.set(a);
        bb.set(b);
        cc=aa+bb;
        cc.output();
    }
}

1.将两个输入存储在字符数组中

2.定义结构体:包含三个函数,set()函数将字符数组每隔4位取出求出其值,放入数组中。重载加号运算符,实现四位数相加和进位等计算,output输出结果。

3.定义结构体还需要两个属性:1.存储数据的数组,2.该数组的索引,知道数组究竟有多少数据



实现如下:

struct E{
    int arr[1000];
    int size;
    void init()
    {
        size=0;
        for(int i=0;i<1000;i++)
            arr[i]=0;
    }
    void set(char str[])
    {
        int c=1;int k=0;
        int count=0;
        init();
        for(int j=strlen(str)-1;j>=0;j--)
        {
            count+=(str[j]-'0')*c;
            c=c*10;
            k++;
            if(k==4 || j==0)
            {
                arr[size]=count;
                size++;
                k=0;
                c=1;
                count=0;
            }
        }
    }
    E operator +(E const &a )const
    {
        int carry=0;
        E e;
        e.init();
        for(int i=0;i<size || i<a.size;i++)
        {
            int temp = arr[i]+a.arr[i]+carry;
            carry=temp/10000;
            e.arr[e.size++]=temp%10000;
        }
        if(carry==1)
            e.arr[e.size++]=1;
        
        return e;
    }
    void output()
    {
        for(int i=size-1;i>=0;i--)
        {
            if(i!=size-1)
                printf("%04d",arr[i]);
            else
                printf("%d",arr[i]);
        }
        printf("\n");
    }
}aa,bb,cc;







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值