# 编程俱乐部每日一练(2018年11月30日)A + B problem 大数加法

编程俱乐部每日一练(2018年11月30日)A + B problem 大数加法

Description

Calculate A + B.

Input

Each line will contain two integers A and B. Process to end of file. (EOF)

Output

For each case, output A + B in one line.

Sample Input 1

2 3
4 5
Sample Output 1

5
9


计算机计算的数值位数有限,当数值位数达到几百几千位时就无法计算。
思路:
将数字以字符串的形式输入,再逆向转为整形数组,对位进行相加,控制好进位和输出时的位置即可。
代码:

#include <stdio.h>
int main()
{
    char A[1000],B[1000];
    while(scanf("%s%s",&A,&B)!=EOF){
            int a[1000],b[1000];     //将0填充到整形数组中
            int i,c,d,e;
            c=0,d=0;
            for(i=strlen(A)-1;i>=0;i--){
                a[c]=A[i]-'0';
                c++;
            }
            for(i=strlen(B)-1;i>=0;i--){
                b[d]=B[i]-'0';
                d++;
            }                              //逆向填充数组
            if (strlen(A)>strlen(B)){
                e=strlen(A);
            }
            else{
                e=strlen(B);
            }                          //选出最长位数
            for (i=0;i<=e-1;i++){
                if (a[i]+b[i]>9){
                    a[i+1]+=1;
                    a[i]=(a[i]+b[i])%10;
                }
                else{
                    a[i]+=b[i];
                }                        //判断进位
            }
            if (a[e]==0){
                for(i=e-1;i>=0;i--){
                    printf("%d",a[i]);
                }
                printf("\n");
            }
            else{
                for(i=e;i>=0;i--){
                    printf("%d",a[i]);
                }
                printf("\n");            //通过判断末位是否为零来确定末尾的位置
            }
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43763903/article/details/84718067