首页 留言 登录
高精度加法-大整数加法

题目描述

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

输入:

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

输出:

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

输入数据:

222222222222222222222222222222

333333333333333333333333333333

输出数据:

555555555555555555555555555555

#include <bits/stdc++.h> 
using namespace std;
#define maxn 250
char sa[maxn],sb[maxn];
int a[maxn],b[maxn],c[maxn];
int main(){
    scanf("%s",sa);
    int la = strlen(sa);              //strlen()不会统计'0'
    for(int i=0;i<la;i++) {           //当i:0时 假设la:10
        //假设sa:'1','3','4','5','6','7','8','9','0'
        //    sa[0]-'0'=1,                        s[9]-'0'=0
        //    a[9] = sa[0]-'0', a[9]:1            a[0] =s[9]-'0',a[0]:0
        //    a[]={0,9,8,7,6,5,4,3,2,1} 
        //    这样sa倒序存进了a     
        a[la - i - 1] = sa[i] - '0';    
    }

    scanf("%s",sb);        
    int lb = strlen(sb);
    for(int i=0;i<lb;i++) {     
        b[lb - i - 1] = sb[i] - '0';    
    }   //     这样sb倒序存进了b    

    int lc = la > lb ? la : lb; //求出la和lb中谁比较大

    memset(c,0,sizeof(c));
    for(int i=0;i<lc;i++) {
        c[i] += a[i] + b[i];
        c[i+1] = c[i]/10;
        c[i] = c[i]%10;
    }
    if( c[lc]>0 ) lc++;

    for(int i=lc - 1;i>=0; i--){
        printf("%d",c[i]);
    }

    cout << endl;
    return 0;
}
上一篇:绝对素数
下一篇:递归实现 前序遍历一个二叉树(链表实现)
验证码
评论留言 (0条)