#include
#include
void sum(char str1[],char str2[],char res[]);
void reverse(char str[]);
int main()
{
char str1[200] = {0};
char str2[200] = {0};
char res[201];
gets(str1);
gets(str2);
sum(str1,str2,res);
printf("%s",res);
return 0;
}
void sum(char str1[],char str2[],char res[])
{
reverse(str1);
reverse(str2);
int len1,len2,i;
int t=0,temp;
len1 = strlen(str1);
len2 = strlen(str2);
for(i=0;itemp = (str1[i]-'0'+str2[i]-'0')%10;
res[i] = temp + t +'0';
if(str1[i]-'0' + str2[i]-'0'>= 10)
t=1;
else
t=0;
}
if(i < len1)
{
for(;itemp = (str1[i] - '0')%10;
res[i] = temp + t +'0';
if(str1[i]-'0' >= 10)
t = 1;
else
t = 0;
}
}
if(i < len2)
{
for(;itemp = (str2[i] - '0')%10;
res[i] = temp + t + '0';
if(str2[i]-'0' >= 10)
t = 1;
else
t = 0;
}
}
if(t == 1)
res[i++] = '1';
res[i] = '\0';
reverse(res);
}
void reverse(char str[])
{
int len;
int i;
char temp;
len = strlen(str);
for(i=0;i2;i++)
{
temp = str[i];
str[i] = str[len-i-1];
str[len-i-1] = temp;
}
}
代码来自社区uu,侵删,求解 res[i] = temp + t +'0'; temp = (str1[i]-'0'+str2[i]-'0')%10; 的意义,仅作学习用途,谢谢
if(t == 1)
res[i++] = '1';
res[i] = '\0';
reverse(res);
//str1[]是字符数组,存储的是ascii码,ascii码可以理解为特殊的整形,和'0'相减等于得到了这个位上的阿拉伯数字。例如:str[0]='9’,即'9'-‘0’=9。即由
//原本的char类型,得到了str[0]上的所对应的整形数字。str2[i]-'0'同理。目的就是对应位数的str1[i]和str2[i]进行相加。然后取余。
emp = (str1[i]-'0'+str2[i]-'0')%10;
//t是上一次运算中的进位符号,如果为1表示需要进位。temp是加法运算后这一位的数字,再加上上一位的进位。
res[i] = temp + t +'0'