求A+B
(0<=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;
}