#include<stdio.h>
#include<string.h>
int main()
{
char str1[1001],str2[1001],*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);/*输出经加法处理改动的大数组*/
printf("\n");
}
return 0;
}
- 不知道是你代码的问题还是你贴代码上来转换的原因。缺少若干个*
- 修改后的代码如下所示
- 下次贴代码的时候记得用“插入代码片”的功能
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char str1[1001], str2[1001], *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);/*输出经加法处理改动的大数组*/
printf("\n");
}
system("pause");
return 0;
}