c语言实现加法器,高精度计算a + b

  • 题目描述
实现一个加法器,使其能够输出a+b的值。
  • 输入
输入包括两个数a和b,其中a和b的位数不超过1000位。
  • 输出
可能有多组测试数据,对于每组数据,
输出a+b的值。
  • 样例输入
2 6
10000000000000000000 10000000000000000000000000000000
  • 样例输出
8
10000000000010000000000000000000
  • 代码
#include <stdio.h>
#include <string.h>

int main(int argc, const char * argv[]) {
    char a[1000], b[1000];
    int c[1000];
    while(scanf("%s %s",a,b) != EOF){
        int len1 = strlen(a);
        int len2 = strlen(b);
        int len;
        int j;
        for(int i = len1;i < 1000;i ++) a[i] = '0';
        for(int i = len2;i < 1000;i ++) b[i] = '0';
        if(len1 > len2){
            len = len1;
            for(int i = len - 1;i >= len1 - len2 ;i --) b[i] = b[i - len1 + len2];
            for(int i = 0;i < len1 - len2;i ++) b[i] = '0';
        }
        else{
            len = len2;
            for(int i = len - 1;i >= len2 - len1 ;i --) a[i] = a[i - len2 + len1];
            for(int i = 0;i < len2 - len1;i ++) a[i] = '0';
        }
        int carry = 0;
        int i;
        for(i = len - 1;i >= 0; i --){
            int x,y;
            x = (int)a[i] - 48;
            y = (int)b[i] - 48;
            c[i] = x + y + carry;
            if(c[i] > 9){
                c[i] -= 10;
                carry = 1;
            }
            else carry = 0;

        }
        if(carry == 1){
            for(int m = len;m > 0;m --) c[m] = c[m - 1];
            len ++;
            a[0] = 1;
        }
        for(j = 0;j < len;j ++)printf("%d",c[j]);
        if(j == len - 1) printf("\n");
    }
    return 0;
}
  • 总结
注意数字0和字符'0'
注意向右对齐的时候的移动
前面要补上字符'0'
注意进位以及最后进位要整体右移

猜你喜欢

转载自blog.csdn.net/weixin_36372879/article/details/79145161
今日推荐