程序代码:
#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; }