由于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;