![](zzz/editor/img/code.gif)
程序代码:
#include <stdio.h>
#include<iostream>
using namespace std;
#define ASCII 48
int main()
{
int i,j,k,m=0,p;
char a[1001],b[1001];
int c[1001]; //数组c中放的是计算结果
for(p=0;p<1001;p++){ c[p]=0; a[p]=' '; b[p]=' '; } //个人理解:这里a[p],b[p]都赋成串结束符更合适
while(cin>>a>>b) // 将两个长整数,作为字符串输入
{
i=0; j=0; k=0;
while(a[i]!=' ') { i++; } //找到串尾的位置,准备从个位开始做加操作
i=i-2;
while(b[j]!=' ') { j++; } //找到串尾的位置,准备从个位开始做加操作
j=j-2;
while(i>=0&&j>=0) //从个位开始做对应数位a[i]和b[i]的加操作
{
if(c[k]+a[i]-ASCII+b[j]-ASCII>9) //当 当前位 加操作有进位时。其中“-ASCII”是将数字字符,转化成相应的数字。下面类似。
{
c[k]=(c[k]+a[i]+b[j]-2*ASCII)%10; //计算进位后的剩余数放入c[k]中,注意到:c[0]中方的是个位。
c[k+1]++; //进位加入c[k+1]
}
else
c[k]+=a[i]+b[j]-2*ASCII; //当前位加操作没有进位的情况
k++;
i--;
j--;
}
while(i>=0) // 当a串较长时,处理长出的那部分:只需每个数位a[i]加上进位c[k]
{
if(c[k]+a[i]-ASCII>9) // 处理操作加没有进位的情况
{
c[k]=(c[k]+a[i]+b[j]-2*ASCII)%10;
c[k+1]++;
}
else // 处理操作加有进位的情况
c[k]+=a[i]-ASCII;
k++;
i--;
}
while(j>=0) //当b串较长时,处理b串长出的那部分
{
if(c[k]+b[j]-ASCII>9)
{
c[k]=(c[k]+b[j]-ASCII)%10;
c[k+1]++;
}
else
c[k]+=b[j]-ASCII;
k++;
j--;
}
printf("the result is :\n");
printf("%s + %s =",a,b);
if(c[k]==0) k--; //先找结果的最高位
while(k>=0) //再输出个数位上的结果
{
printf("%d",c[k--]);
}
printf("\n");
for(p=0;p<1001;p++) //为计算下一组 a,b,初始化数组a,b,c
{
c[p]=0;
a[p]=' ';
b[p]=' ';
}
}
return 0;
}