69,371
社区成员
发帖
与我相关
我的任务
分享
/* PRESET CODE BEGIN - NEVER TOUCH CODE BELOW */
#include <stdio.h >
#include <string.h >
void revnum(char *num);
void add(char a[], char b[], char c[]);
int main()
{
char a[501], b[501], r[501];
int n;
for(;;) {
memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));
memset(r, 0, sizeof(r));
n = scanf("%s %s", a, b);
if (n != 2) break;
revnum(a);
revnum(b);
add(a, b, r);
revnum(r);
printf("%s\n", r);
}
return 0;
}
/* PRESET CODE END - NEVER TOUCH CODE ABOVE*/
void revnum(char *num)/*字符串反序,应该没有问题*/
{
int m,i1;
char x;
m=strlen(num); //12345 123456
//for(i1=0;i1 <=m/2;i1++)
for(i1=0;i1 <m/2;i1++)
{
x=*(num+i1);
*(num+i1)=*(num+m-i1-1);
*(num+m-i1-1)=x;
}
}
void add(char a[501], char b[501], char c[501])/*加法计算器*/
{
/*static*/ int i,alen,blen,len;//,a[501],b[501],c[501];/*不用静态变量*/
if(strcmp(a,"0")==0)/*先计算加数有0的情况*/
{
strcpy(c,b);
return;
}
if(strcmp(b,"0")==0)
{
strcpy(c,a);
return;
}
alen=strlen(a);
blen=strlen(b);
for(i=0;a[i]!= '\0';i++)/*数值化*/
{
a[i]=a[i]-48;
}
for(i=0;b[i]!= '\0';i++)
{
b[i]=b[i]-48;
}
if(strcmp(a,"0")!=0 && strcmp(b,"0")!=0)/*前面两种情况除了就是这种情况,所以这个判断多余*/
{
if(alen >blen)
{
len=alen;
}
else
{
len=blen;
}/*确定和的最高位数便是len*/
for( i=0;i<len+2;i++)//给结果数组清下0
{
c[i]=0;
}
for(i=0;i <len;i++)
{
c[i]+=a[i]+b[i];/*加法运算*/
if(c[i] >=10)/*进位处理*/
{
c[i+1]++;
c[i]=c[i]%10;
}
}
if(c[len]==0)/*判断最高位是否有数值*/
{
c[len]= '\0';
}
else
{
c[len]= '1';
c[len+1]= '\0';
}
for(i=0;i <len;i++)/*字符化*/
{
c[i]=c[i]+48;
}
}
}