信息学奥赛一本通T1168:高精度计算 大整数加法

【题目描述】求两个不超过200位的非负整数的和。【输入】有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。【输出】一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。【输入样例】22222222222222222222【输出样例】55555555555555555555【源程序】 

信息学奥赛一本通T1168:大整数加法

【题目描述】

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

【输入】

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

【输出】

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

【输入样例】

22222222222222222222
33333333333333333333

【输出样例】

55555555555555555555

【源程序】

#include<iostream>  
#include<cstring>  
#include<string>  
using namespace std;  
int main()  
{  
    string str1,str2;  
    int a[210],b[210],c[210];  
    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;  
    while(c[lenc]==0)  
        lenc--;  
  
    for(i=lenc;i>0;i--)//倒序输出  
        cout<<c[i];  
    cout<<endl;  
  
    return 0;  
}  

 

信息学奥赛一本通T1168:高精度计算 大整数加法 归属于 高精度计算,更多同类题解源程序见:高精度计算 和 大整数加法

0 条评论

请先 登录 后评论
不写代码的码农
轩爸

0 篇文章

作家榜 »

  1. admin 2 文章
  2. 张芳 0 文章
  3. hanna 0 文章
  4. Jason 0 文章
  5. lixiaioqian 0 文章
  6. GeraldWrora 0 文章
  7. 董伟 0 文章
  8. 信奥达人 0 文章