大数加法A+B

来源:互联网 发布:ios 可变字典添加数据 编辑:程序博客网 时间:2024/06/08 00:00

思路:
1、将A B当作字符串读入。
2、将两个字符串分别倒序。
3、从个位对齐开始进行相加,对是否产生进位进行判断。
4、当两个串长度不等,相加结束后,较长的串剩下的位单独与进位运算。
5、将结果倒序输出。

#include <stdio.h>int main(){    // 读取两个字符串    char ta[1002];    char tb[1002];    scanf("%s %s",ta,tb);    // 计算 a b 的长度    int ia = 0;    int ib = 0;    while(ta[ia] != '\0')        ia++;    while(tb[ib] != '\0')        ib++;    // 将 a b 倒序    char a[1002];    char b[1002];    int i = -1;    for(i=0; i<ia; i++)        a[i] = ta[ia-1-i];    for(i=0; i<ib; i++)        b[i] = tb[ib-1-i];    a[ia] = '\0';    b[ib] = '\0';    // 求和    char c[1003];    int ret = 0;    if(ia < ib)    {        for(i=0; i<ia; i++)        {            c[i] = (ret + (a[i]-'0') + (b[i]-'0')) + '0';            ret = (c[i]-'0') / 10;            c[i] = ((c[i]-'0') % 10) + '0';        }        for(; i<ib; i++)        {            c[i] = (ret + (b[i]-'0')) + '0';            ret = (c[i]-'0') / 10;            c[i] = ((c[i]-'0') % 10) + '0';        }        if(ret != 0)        {            c[i] = ret + '0';            i++;            c[i] = '\0';        }        else            c[i] = '\0';    }    else    {        for(i=0; i<ib; i++)        {            c[i] = (ret + (a[i]-'0') + (b[i]-'0')) + '0';            ret = (c[i]-'0') / 10;            c[i] = ((c[i]-'0') % 10) + '0';        }        for(; i<ia; i++)        {            c[i] = (ret + (a[i]-'0')) + '0';            ret = (c[i]-'0') / 10;            c[i] = ((c[i]-'0') % 10) + '0';        }        if(ret != 0)        {            c[i] = ret + '0';            i++;            c[i] = '\0';        }        else            c[i] = '\0';    }    // 将 c 倒序    char r[1003];    if(i != -1)    {        int j;        for(j=0; j<i; j++)            r[j] = c[i-1-j];        r[j] = '\0';        printf("%s\n", r);    }}
0 0