加法不是直接可以用吗,为什么还要本题,因为如果数字太大,会超出限制(本题就是),因此本题要应用数组来得出最终结果。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char num1[1000],num2[1000];
int j,i,a[1000],b[1000],c[1000]={0},l1,l2,t,n,k,f;
scanf("%d",&n);
for(k=1;k<=n;k++)
{
f=1;
scanf("%s%s",num1,num2);
l1=strlen(num1);
l2=strlen(num2);//计算两个字符串的长度
for(i=0;i<l1;i++)
{
a[i]=num1[i]-'0';
}
for(i=0;i<l2;i++)
{
b[i]=num2[i]-'0';//将两个字符型数组转化为数字型数组便于运算。
}
t=l1;
if(t<l2)
{
f=0;
t=l2;
}//由于两个字符串长度不定,因此需要确定大小关系,以便于for循环中的变量控制
if(f==1)
{for(i=t-1,j=l2-1;j>=0;i--,j--)
{
c[i]=a[i]+b[j];
}//从个位,十位依次相加,加到短字符串没有为止
for(;i>=0;i--)
c[i]=a[i];
}//长字符串剩余部分依次补齐
else
{
for(i=t-1,j=l1-1;j>=0;i--,j--)
{
c[i]=a[j]+b[i];
}
for(;i>=0;i--)
c[i]=b[i];
}
for(i=t-1;i>0;i--)
{
c[i-1]+=c[i]/10;
c[i]=c[i]%10;
}//各个位置对应满十进位,最高位没有进位,也无需进位,因为后面是以数组形势输出
printf("Case %d:\n",k);
printf("%s + %s = ",num1,num2);
for(i=0;i<t;i++)printf("%d",c[i]);
if(k==n)printf("\n");//消除最后的空行
else printf("\n\n");
}
return 0;
}
杭电OJ1002--A+B问题二
最新推荐文章于 2023-08-02 11:41:46 发布