hd_1002
来源:互联网 发布:java多线程编程例子 编辑:程序博客网 时间:2024/06/14 16:14
#include<stdio.h>
#include<iostream>
#include <string.h>
using namespace std;
int main()
{
int n,m=0,g,c,i,j,length;
char a[1005],b[1005];
scanf("%d",&n);
getchar();
g=n;
while(n--)
{
int a1[1005]={0},b1[1005]={0},c1[1005]={0};
m++;
int len1,len2;
i=0,j=0,c=0;
scanf("%s %s",a,b);//123 789
getchar();
len1=(int)strlen(a);//获取字符串长度
len2=(int)strlen(b);
while(i<(int)strlen(a))//将字符转换位数字 反向存储
{
a1[--len1]=(int)a[i]-48;//321
i++;
}
while(j<(int)strlen(b))//将字符转换位数字 反向存储
{
b1[--len2]=(int)b[j]-48;//987
j++;
}
len1=(int)strlen(a);//重新获取长度
len2=(int)strlen(b);
for(i=len1-1;i>=0;i--)//处理0,就是0在开头的数
{
if(a1[i]==0)//反向后,0在结尾
{
len1--;//如果是0,长度减一,0就没有了
}
else if(a1[i]!=0)//否则跳出循环
{
break;
}
}
for(i=len2-1;i>=0;i--)
{
if(b1[i]==0)
{
len2--;
}
else if(b1[i]!=0)
{
break;
}
}
length=(len1<len2)?len2:len1;//找出最长的
if(len1==0&&len2==0)//如果输入为0 0000 000 经过减0处理都为0
{
printf("Case %d:\n%s + %s = 0",m,a,b);//输出0
printf("\n");
if(n>=1)printf("\n");
continue;
}
for(i=0;i<length;i++)//相加 进位运算
{
c1[i]=(a1[i]+b1[i]+c)%10;
c=(a1[i]+b1[i]+c)/10;//a1[i]+b1[i]>=10 进一位
}
if(c==1) //如果进位
{
c1[length]=1;//末尾加1 反向输出时即为第一位
printf("Case %d:\n%s + %s = ",m,a,b);
for(int i=length;i>=0;i--)//反向输出
{
printf("%d",c1[i]);
}
printf("\n");
if(n>=1)printf("\n");
}
else
{
printf("Case %d:\n%s + %s = ",m,a,b);
for(int i=length-1;i>=0;i--)
{
printf("%d",c1[i]);
}
printf("\n");
if(n>=1)printf("\n");
}
}
system("pause");
return 0;
}
#include<iostream>
#include <string.h>
using namespace std;
int main()
{
int n,m=0,g,c,i,j,length;
char a[1005],b[1005];
scanf("%d",&n);
getchar();
g=n;
while(n--)
{
int a1[1005]={0},b1[1005]={0},c1[1005]={0};
m++;
int len1,len2;
i=0,j=0,c=0;
scanf("%s %s",a,b);//123 789
getchar();
len1=(int)strlen(a);//获取字符串长度
len2=(int)strlen(b);
while(i<(int)strlen(a))//将字符转换位数字 反向存储
{
a1[--len1]=(int)a[i]-48;//321
i++;
}
while(j<(int)strlen(b))//将字符转换位数字 反向存储
{
b1[--len2]=(int)b[j]-48;//987
j++;
}
len1=(int)strlen(a);//重新获取长度
len2=(int)strlen(b);
for(i=len1-1;i>=0;i--)//处理0,就是0在开头的数
{
if(a1[i]==0)//反向后,0在结尾
{
len1--;//如果是0,长度减一,0就没有了
}
else if(a1[i]!=0)//否则跳出循环
{
break;
}
}
for(i=len2-1;i>=0;i--)
{
if(b1[i]==0)
{
len2--;
}
else if(b1[i]!=0)
{
break;
}
}
length=(len1<len2)?len2:len1;//找出最长的
if(len1==0&&len2==0)//如果输入为0 0000 000 经过减0处理都为0
{
printf("Case %d:\n%s + %s = 0",m,a,b);//输出0
printf("\n");
if(n>=1)printf("\n");
continue;
}
for(i=0;i<length;i++)//相加 进位运算
{
c1[i]=(a1[i]+b1[i]+c)%10;
c=(a1[i]+b1[i]+c)/10;//a1[i]+b1[i]>=10 进一位
}
if(c==1) //如果进位
{
c1[length]=1;//末尾加1 反向输出时即为第一位
printf("Case %d:\n%s + %s = ",m,a,b);
for(int i=length;i>=0;i--)//反向输出
{
printf("%d",c1[i]);
}
printf("\n");
if(n>=1)printf("\n");
}
else
{
printf("Case %d:\n%s + %s = ",m,a,b);
for(int i=length-1;i>=0;i--)
{
printf("%d",c1[i]);
}
printf("\n");
if(n>=1)printf("\n");
}
}
system("pause");
return 0;
}