两个大整数相加

来源:互联网 发布:java实现链接ftp服务 编辑:程序博客网 时间:2024/05/17 09:39

问题描述

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

输入数据

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

输出要求

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

输出为0342

输入样例

22222222222222222222

33333333333333333333

输出样例

Output Sample:

55555555555555555555

 

注意,这道题目,没有任何数据类型可以存储下这么大的数据,故只能用数组,首先我们可以用两个字符数组来存储两个相加的整数(因为只有我们可以进行整体输入),然后在进行类型转换(这里要用到两个整型来存储着两个数),然后在用一个数组来存储相加所得的和(这里要注意进位的问题)。

下面是我给出的代码:

 

#include<iostream>
#include<cstring>
using namespace std;

const int MAXN=200+5;
char str1[MAXN];
char str2[MAXN];
int str3[MAXN];
int str4[MAXN];
int str5[MAXN];

int main(void)
{
    memset(str1,0,sizeof(str1));
    memset(str2,0,sizeof(str2));
    memset(str3,0,sizeof(str3));
    memset(str4,0,sizeof(str4));
    memset(str5,0,sizeof(str5));
    cin>>str1>>str2;
    int len1=strlen(str1);
    int i;

   int j=0;
    for(i=len1-1; i>=0;i--)

    {
        str3[j++]=str1[i]-'0';
    }
    int len2;
    len2=strlen(str2);

    int j=0;
    for(i=len2-1; i>=0; i--)
    {
        str4[j++]=str2[i]-'0';
    }
    int c=0;
    for(i=0; i<MAXN; i++)
    {
        str5[i]=str4[i]+str3[i]+c;
        c=str5[i]/10;//处理进位。
        str5[i]%=10;
    }
    for(i=MAXN-1; i>=0&&str5[i]==0; i--);
    if(i>=0)
    {
        for(; i>=0; i--)
        {
            cout<<str5[i];
        }
        cout<<endl;
    }
    return 0;
}

原创粉丝点击