洛谷题单算法1-1模拟与高精度P1601 A+B Problem

题目描述

高精度加法,相当于a+b problem,不用考虑负数.
输入格式

分两行输入。a,b<=10^500
输出格式

输出只有一行,代表a+b的值
输入输出样例
输入 #1
1
1

输出 #1
2

#include
#include
#include
using namespace std;
/*
整体思路就是将大整数存入一个数组,然后从两个存储加数的数组个位开始逐位取出
进行加法操作,并将结果存入第三个数组,这里存入时需要注意进位的运算。因为我
们是从个位开始运算的,所以结果输出时应该从高位输出,这里需要注意可能会有多
余的0。
*/
int main()
{
    string str1,str2;
    int a[100],b[100],c[100];//分别暂存加数,被加数,和
    int len1,len2;
    int i;
 
    cin>>str1;
    cin>>str2;
    len1=str1.length();
    len2=str2.length();
 
    /*补0工作,保证两个字符串相同*/
    if(len1<len2)
        for(i=1;i<=len2-len1;i++)
           str1="0"+str1;
    else
        for(i=1;i<=len1-len2;i++)
           str2="0"+str2;
 
    len1=str1.length();
    len2=str2.length();
 
    for(i=0;i<=len1-1;i++)//加数str1存入数组a
        a[len1-i]=str1[i]-'0';
    for(i=0;i<=len2-1;i++)//加数str2存入数组b
        b[len2-i]=str2[i]-'0';
 
    int x=0;
    int lenc=1;
    while((lenc<=len1)||(lenc<=len2))
    {
        c[lenc]=a[lenc]+b[lenc]+x;//第i位相加并加上次的进位
        x=c[lenc]/10;//向高位进位
        c[lenc]%=10;//存储第i位的值
        lenc++;//位置下标
    }
    
    /*处理最高进位*/
    c[lenc]=x;
    if(c[lenc]==0)
        lenc--;
        
    for(i=lenc;i>0;i--)//倒序输出
        cout<<c[i];
    cout<<endl;
 
    return 0;
}

你可能感兴趣的:(洛谷题单算法1-1模拟与高精度)