C语言版:
#include <stdio.h>
#include <string.h>
//初始化数组
char a[1002]={0},b[1002]={0},sum[1002]={0},a1[1002]={0},b1[1002]={0};
int main()
{
int i,j,t,lena,lenb,k;
while(scanf("%d",&t)!=EOF)
{
for(i=0;i<t;i++)
{
scanf("%s%s",a,b);
lena=strlen(a);
lenb=strlen(b);
k=0;
//把输入的字符串转换为数字之后倒置保存在a1数组中
for(j=lena-1;j>=0;j--)
{
a1[k++]=a[j]-'0';
}
k=0;
for(j=lenb-1;j>=0;j--)
{
b1[k++]=b[j]-'0';
}
//数组之间开始进行计算
j=0;
while(j<=lena||j<=lenb)
{
//判断是否有进位
if(sum[j]+a1[j]+b1[j]>=10)
{
sum[j+1]=sum[j+1]+1;
sum[j]=sum[j]+a1[j]+b1[j]-10;
}
else
sum[j]=sum[j]+a1[j]+b1[j];
j++;
}
printf("Case %d:\n",i+1);
printf("%s + %s = ",a,b);
//判断首位的是否有零
//首位有零,则后一位绝不为零。
//当后面那位为零,有两种情况,一是前后两位都为零则其为虚零
//而是后一位若是进位产生的零则首位为1,若首位再发生进位则首位的前一位为一
if(sum[j-1])
{
for(k=j-1;k>=0;k--)
printf("%d",sum[k]);
}
else
{
for(k=j-2;k>=0;k--)
printf("%d",sum[k]);
}
printf("\n");
//case之间输出间隔
if(i<t-1)
printf("\n");
//以sum数组的长度大小把第一个参数的数组元素置为零
memset(a,0,sizeof(sum));
memset(b,0,sizeof(sum));
memset(a1,0,sizeof(sum));
memset(b1,0,sizeof(sum));
memset(sum,0,sizeof(sum));
}
}
return 0;
}
C++版:
#include <iostream>
#include <string>
using namespace std;
string &_del_zeros_before_dot(string &a)
{
if (a.length() <= 0 || a[0] != '0') return a;
int i = 0;
while (i < a.length() && a[i] == '0') ++i;
a = a.substr(i, a.length() - i);
return a;
}
string &_string_add_string(const string &a, const string &b, string &res)
{
int sum_value = 0, add_bit = 0;//add_bit是进位
const int alen = a.length(), blen = b.length();
res = "0" + (alen > blen ? a : b);//是给进位的使用
for (int i = alen-1, j = blen-1, k = res.length() - 1;
i >= 0 || j >= 0 || add_bit > 0;
--i, --j, --k){
sum_value = (i>=0 ? a[i]-48: 0) + (j>=0 ? b[j]-48: 0) + add_bit;
add_bit = sum_value / 10;
//要变为字符所以需要加上'0'
res[k] = sum_value%10 + '0';
}
if (res[0] == '0') res = res.substr(1, res.length() - 1);
return res;
}
int main(void)
{
string a, b, c;
int t;
scanf("%d", &t);
for (int i = 1; i < t + 1; ++i){
cin >> a >> b;
_del_zeros_before_dot(a);
_del_zeros_before_dot(b);
printf("Case %d:\n%s + %s = ", i, a.c_str(), b.c_str());
_string_add_string(a, b, c);
printf("%s\n", c.c_str());
if (i != t) printf("\n");
}
return 0;
}