求大神帮看此大数相加代码是否有有关问题
求大神帮看此大数相加代码是否有问题
------解决思路----------------------
修改如下:
#include<stdio.h>
#include<string.h>
#define size 1001
int main()
{
char str1[size],str2[size],*num1,*num2,*p1,*p2;
int ncase/*多组输入数目*/,mcase=1/*输出时的第几个输出计数器*/,up/*进位存储器*/,len1,len2,len;
scanf("%d",&ncase);
while(ncase--)
{
scanf("%s %s",str1,str2);
printf("case %d:\n",mcase++);
printf("%s + %s = ",str1,str2);
len1=strlen(str1);/*分别计算两数长度*/
len2=strlen(str2);
if( len1 >= len2 )/*把num1赋较大数的数组首地址num2赋较小数的数组首地址,且保证len1存长数组长度len2存短数组长度*/
{
num1=str1;
num2=str2;
}
else
{
num1=str2;
num2=str1;
len=len1;
len1=len2;
len2=len;
}
up=0;/*进位赋初值0*/
for(p1=num1+len1-1,p2=num2+len2-1;p1>=num1;p1--,p2--)/*从各自最小位逐位相加,以较大数的最高位为边界*/
{
if( p2 < num2 )/*当高位无数时补0*/
*p2=48;
*p1=*p1+*p2-96+up;/*由ascII码值化为十进制值*/
up=0;
if( *p1 >= 10 )/*如果此位相加结果十进制值大于10则作减10处理*/
{
*p1-=10;
up=1;/*进位寄存器赋1*/
}
*p1+=48;/*再次化为ascII码以供输出*/
}
if( up == 1 )/*当最高位加上进位仍产生进位则需于前再输出一个“1”*/
printf("1");
printf("%s\n",num1);/*输出经加法处理改动的大数组*/
if( ncase != 0 )
printf("\n");
}
return 0;
}
------解决思路----------------------
修改如下:
#include<stdio.h>
#include<string.h>
#define size 1001
int main()
{
char str1[size], str2[size], *num1, *num2, *p1, *p2;
int ncase/*多组输入数目*/, mcase = 1/*输出时的第几个输出计数器*/, up/*进位存储器*/, len1, len2, len;
scanf("%d", &ncase);
while (ncase--)
{
scanf("%s %s", str1, str2);
printf("case %d:\n", mcase++);
printf("%s + %s = ", str1, str2);
len1 = strlen(str1);/*分别计算两数长度*/
len2 = strlen(str2);
if (len1 >= len2)/*把num1赋较大数的数组首地址num2赋较小数的数组首地址,且保证len1存长数组长度len2存短数组长度*/
{
num1 = str1;
num2 = str2;
}
else
{
num1 = str2;
num2 = str1;
len = len1;
len1 = len2;
len2 = len;
}
up = 0;/*进位赋初值0*/
//for (p1 = num1 + len1 - 1, p2 = num2 + len2 - 1; p1 >= num1; p1--, p2--)/*从各自最小位逐位相加,以较大数的最高位为边界*/
for (p1 = num1 + len1 - 1, p2 = num2 + len2 - 1; p2 >= num2; p1--, p2--)/*从各自最小位逐位相加,以较大数的最高位为边界*/
{
//if (p2 < num2)/*当高位无数时补0*/
// *p2 = 48;
*p1 = *p1 + *p2 - 96 + up;/*由ascII码值化为十进制值*/
up = 0;
if (*p1 >= 10)/*如果此位相加结果十进制值大于10则作减10处理*/
{
*p1 -= 10;
up = 1;/*进位寄存器赋1*/
}
*p1 += 48;/*再次化为ascII码以供输出*/
}
if (up == 1)/*当最高位加上进位仍产生进位则需于前再输出一个“1”*/
//printf("1");
{
while (p1 >= num1)
{
*p1 += 1;
if (*p1 > '9')
{
*p1 = '0';
up = 1;
p1--;
}
else break; //无进位,直接跳出
}
if (p1 < num1) printf("1");
}
printf("%s\n", num1);/*输出经加法处理改动的大数组*/
if (ncase != 0)
printf("\n");
}
return 0;
}