杭电oj这道题的解法是要通过字符数组储存数字在进行运算的,同时涉及到数值进位的问题,以下是代提供码参考。
-
#include
-
#include
-
int main()
-
{
-
char a[
1000],b[
1000];
-
int sum[
10000]={
0};
-
int c,d,e,f,g,i,n,s;
-
scanf(
"%d",&n);
-
f=
48;
-
s=
1;
-
c=n;
-
while(n--)
-
{
-
scanf(
"%s",a+
1);
-
scanf(
"%s",b+
1);
-
printf(
"Case %d:\n",s);
-
printf(
"%s + %s = ",a+
1,b+
1);
-
d=
strlen(a+
1);
-
e=
strlen(b+
1);
-
for(i=
1;i<=d;i++)
-
a[i]=a[i]
-48;
-
for(i=
1;i<=e;i++)
-
b[i]=b[i]
-48;
-
if(d==e)
//数字位数相同的情况
-
{
-
for(i=
1;i<=d;i++)
-
{
-
-
if(a[i]+b[i]>=
10&&i>=
2)
-
{
-
sum[i
-2]=sum[i
-2]+
1;
//向前面的一个sum加一进位,比如10+1
-
sum[i
-1]=(a[i]+b[i]
-10);
//进一位后再减去10,比如15-1=5
-
}
-
else
-
sum[i
-1]=a[i]+b[i];
-
}
-
}
-
else
if(d>e)
//数字位数不相同的情况
-
{
-
for(i=
1;i<=d-e;i++)
-
sum[i]=a[i];
-
f=
1;
-
for(i=d-e+
1;i<=d;i++)
-
{
-
if(a[i]+b[f]>=
10)
-
{
-
sum[i
-1]=sum[i
-1]+
1;
-
sum[i]=a[i]+b[f]
-10;
-
if(sum[i
-1]>=
10)
-
{
-
for(g=i
-1;g>=
1;g--)
//考虑前面位数为10的进位
-
{
-
if(sum[g]>=
10)
-
{
-
sum[g
-1]=sum[g
-1]+
1;
-
sum[g]=sum[g]
-10;
-
}
-
}
-
}
-
}
-
else
-
sum[i]=a[i]+b[f];
-
f++;
-
}
-
}
-
else
if(d
//数字位数不相同的情况
-
{
-
for(i=
1;i<=e-d;i++)
-
sum[i]=b[i];
-
f=
1;
-
for(i=e-d+
1;i<=e;i++)
-
{
-
if(a[f]+b[i]>=
10)
-
{
-
sum[i
-1]=sum[i
-1]+
1;
-
sum[i]=a[f]+b[i]
-10;
-
if(sum[i
-1]>=
10)
-
{
-
for(g=i
-1;g>=
1;g--)
-
{
-
if(sum[g]>=
10)
-
{
-
sum[g
-1]=sum[g
-1]+
1;
-
sum[g]=sum[g]
-10;
-
}
-
}
-
}
-
}
-
else
-
sum[i]=a[f]+b[i];
-
f++;
-
}
-
}
-
if(d==e)
-
{
-
for(i=
0;i
-
printf(
"%d",sum[i]);
-
sum[
0]=
0;
-
s++;
-
}
-
if(d>e)
-
{
-
if(sum[
0]==
0)
-
{
-
for(i=
1;i<=d;i++)
-
printf(
"%d",sum[i]);
-
}
-
else
-
{
-
for(i=
0;i<=d;i++)
-
printf(
"%d",sum[i]);
-
sum[
0]=
0;
-
}
-
s++;
-
}
-
if(d
-
{
-
if(sum[
0]==
0)
-
{
-
for(i=
1;i<=e;i++)
-
printf(
"%d",sum[i]);
-
}
-
else
-
{
-
for(i=
0;i<=e;i++)
-
printf(
"%d",sum[i]);
-
sum[
0]=
0;
-
}
-
s++;
-
}
-
if(s!=c+
1)
-
{
-
printf(
"\n");
-
printf(
"\n");
-
}
-
else
-
printf(
"\n");
-
}
-
}
注意输出的格式。
其实说复杂也不复杂,有些地方是类似的。
转载自https://blog.csdn.net/qq_41083200/article/details/78555856