大数加法以及大数乘法

之前一直觉得大数就是很大的数,unsigned long long就能处理的了……没想到是上百位长的数啊 = =

大数加法

给定A,B两个数,A,B的长度均不超过500,求A+B的和

#include
#include
#include
#include
#define N 1010
using namespace std;

int main(void) {
    char num1[N],num2[N];

    int length1,length2,c,k,i;
    while(scanf("%s%s",num1,num2) == 2) {
        int a[N] = {0},b[N] = {0};//保留每一位上的数字
        length1 = strlen(num1);
        length2 = strlen(num2);
        k = max(length1,length2);
        c = k;
        for(i=0; i1 - i] - '0';//只进行到a[1],留出a[0]用以进位
        }
        for(i=0,k=c; i1 - i] - '0';
        }
        for(i=c; i>0; i--) {
            a[i] += b[i];
            if(a[i]>=10) {//进位
                a[i] -= 10;
                a[i-1]++;
            }
        }//有可能第一位是0,也有可能是1,取决于进位的情况
        if(a[0] != 0) {
            for(i=0; i<=c; i++) {
                printf("%d",a[i]);
            }
        }else {
            for(i=1; i<=c; i++) {
                printf("%d",a[i]);
            }
        }
        printf("\n");
    }
    return 0;
}

你可能感兴趣的:(做题)