ocrosoft Contest1316 - 信奥编程之路~~~~~第三关 问题 K: 大整数加法

http://acm.ocrosoft.com/problem.php?cid=1316&pid=10

 

题目描述

求两个不超过200位的非负整数的和。

 

输入

有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。

 

输出

一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。

 

样例输入

22222222222222222222
33333333333333333333

样例输出

55555555555555555555

代码:

#include <bits/stdc++.h>
using namespace std;
 
#define N 1001
int main() {
    char ch1[N], ch2[N];
    int  num1[N], num2[N];
    int len1, len2, j, maxx, k ;
 
    memset(ch1, 0, sizeof(ch1));
    memset(ch2, 0, sizeof(ch2));
    memset(num1, 0, sizeof(num1));
    memset(num2, 0, sizeof(num2));
    scanf("%s", ch1);
    scanf("%s", ch2);
    len1 = strlen(ch1);
    len2 = strlen(ch2);
 
    k = 0;
    for(int j = len1 - 1; j >= 0; j--)
        num1[k ++] = ch1[j] - '0';
    k=0;
    for(int j = len2 - 1; j >= 0; j--)
        num2[k ++] = ch2[j] - '0';
 
    maxx = len1 > len2 ? len1 : len2;
    for(int j = 0; j < maxx; j ++){
        num1[j] += num2[j];
        if(num1[j] >= 10) {
            num1[j] -= 10;
            num1[j + 1] ++;
        }
    }
    if(num1[maxx])
        printf("%d", num1[maxx]);
    for(int j = maxx - 1; j >= 0; j --)
        printf("%d", num1[j]);
    printf("\n");
    return 0;
}

  

posted @ 2018-09-30 11:24  丧心病狂工科女  阅读(173)  评论(0编辑  收藏  举报