高精度加法(重载运算符)

来源:互联网 发布:抢牛牛开挂神器软件 编辑:程序博客网 时间:2024/05/09 23:27

求A+B0<=A,B<=10100000
高精度加法(重载运算符版),在网上有很多写法,表示不能很清楚的明白其内容,这里给出一份c语言的简单版本,便于学习理解。

#include <stdio.h>#include <string.h>#define max(a,b) ((a)>(b)?(a):(b))struct Data{    int a[100001], len;    Data()//初始值    {        memset(a, 0, sizeof(a));        len = 1;    }    Data operator + (const Data &A)const    {        Data B;        B.len = max(len, A.len);        for(int i = 0 ; i < B.len; i++)//边界需要注意        {            B.a[i] += A.a[i]+a[i];            if(B.a[i] >= 10)            {                B.a[i] -= 10;//由于不会超过10,故用 -=10 代替 %10 效率更高                B.a[i+1]++;//进位            }        }        if(B.a[B.len])//考虑是否会进到B.len的下一位            B.len++;        return B;    }    void read()//读入函数    {        char d[100001];        scanf("%s",d);        int l=strlen(d);        for(int i=0; i<l; i++)            a[i]=d[l-i-1]-'0';        len=l;    }    void write()//输出函数    {        for(int i = len-1; i>=0; i--)            printf("%d", a[i]);    }};Data A,B,C;int main(){    A.read();    B.read();    C = A+B;//在进行Data之间的计算时可直接使用‘+’,原来int之间的加法运算不会被改变    C.write();    return 0;}
0 0
原创粉丝点击