51Nod大数加法

 

给出2个大整数A,B,计算A+B的结果。

输入格式

第1行:大数A 第2行:大数B (A,B的长度 <= 10000 需注意:A B有可能为负数)

输出格式

输出A + B

输入样例

68932147586
468711654886

输出样例

537643802472

参考程序 

#include <bits/stdc++.h>
using namespace std;
char ch[10010];
int a[10010], b[10010], la, lb;
int main() {
    scanf("%s", ch + 1 );
    if(ch[1] == '-') {
        la = strlen( ch + 1 ) - 1;
        for( int i = 2; i <= la + 1; ++i ) a[ la + 1 - i + 1 ] = -( ch[ i ] - '0' );
    } else {
        la = strlen( ch + 1 );
        for( int i = 1; i <= la; ++i ) a[ la - i + 1 ] = ch[ i ] - '0';
    }
    scanf( "%s", ch + 1 );
    if( ch[ 1 ] == '-' ) {
        lb = strlen( ch + 1 ) - 1;
        for( int i = 2; i <= lb + 1; ++i ) b[ lb + 1 - i + 1 ] = -( ch[ i ] - '0' );
    } else {
        lb = strlen( ch + 1 );
        for( int i = 1; i <= lb; ++i ) b[ lb - i + 1 ] = ch[ i ] - '0';
    }
    //以上是读入
    la = max( la, lb ) + 1;
    for( int i = 1; i < la; ++i ) a[ i ] += b[ i ];
    for( int i = 1; i < la; ++i ) { 
        a[ i + 1 ] += a[ i ] / 10;
        a[ i ] %= 10;
        if( a[ i ] < 0 ) {
            a[ i ] += 10;
            --a[ i + 1 ];
        }
    }
    while( la > 1 && a[ la ] == 0 ) --la;
    if( a[ la ] < 0 ) {
        printf( "-" );
        for( int i = 1; i <= la; ++i ) a[ i ] = -a[ i ];
        for( int i = 1; i < la; ++i ) {
            if( a[ i ] < 0 ) {
                a[ i ] += 10;
                --a[ i + 1 ];
            }
        }
        while( la > 1 && a[ la ] == 0 ) --la;
        for( int i = la; i >= 1; --i ) printf( "%d", a[ i ] );
    } else
    for( int i = la; i >= 1; --i ) printf( "%d", a[ i ] );
    printf( "\n" );
    return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值