用数组储存两个数进行计算


#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'