高精度加法

本文详细介绍了如何处理两个不超过200位的非负整数的加法运算,通过逆序存储和逐位相加的方法,实现了大数加法,并有效处理了前导零的问题。
【题目描述】
求两个不超过200位的非负整数的和。

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

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

【输入样例】
22222222222222222222
33333333333333333333

【输出样例】
55555555555555555555
#include<iostream>  
#include<cstring>  
#include<string>  
using namespace std;  
char s1[210],s2[210];
int a[210],b[210],c[210];

int main()
{
    cin>>s1;
    cin>>s2;
    int i,j,lena,lenb,lenc,max,x;
    lena=strlen(s1);
    lenb=strlen(s2);

    
    for(i=0;i<=lena;i++)    //逆序存储于数组中
        a[lena-i]=s1[i]-'0';
    for(i=0;i<=lenb;i++)
        b[lenb-i]=s2[i]-'0';

    x=0;    //x用来进位
    lenc=1;
    while(  (lenc<=lena)  ||  (lenc<=lenb)  )
    {
        c[lenc]=a[lenc]+b[lenc]+x;
        x=c[lenc]/10;
        c[lenc]=c[lenc]%10;
        lenc++;
    }
    c[lenc]=x;  //最后这个位也要进,别忘了
    while(c[lenc]==0)   //删除前导零
        lenc--;  
  
    for(i=lenc;i>0;i--)  //逆序输出数组c
        cout<<c[i];  
    cout<<endl;  
  
    return 0;  
} 

注意题目条件!输入可能会有前导零!

转载于:https://www.cnblogs.com/liufei-/p/9530613.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值