AllieLee

导航

A + B -2013编程之美全国测试赛 每日一练

Description:输入两个正整数A和B, 求A+B的值,其中测试分为小数据测试和大数据测试

Input:两个正整数A, B

Output:A+B的和 

对于小数据, 0 < A, B <= 10; 对于大数据, 0 < A, B <= 10100 

Sample Input

2 3

Sample Output

5

思路:

1.对于小数据A,B<=10,通常可以采用一个long int来表示(long int 为8字节,即64位可以保存1010以内的数据);然而对于大数据,则不能满足要求,这里需要采用字符串来保存输入 的A和B值,然后对字符串进行加法运算。

2.由于输入的数据是从高位到低位输入,加法运算则需要从低位向高位进行运算,此时可以将输入的数字字符串反转保存到整数数组中(也可直接保存在字符串中,只需注意字符和整数的转换关系即可)。

#include<iostream>
#include<string>
#include<cstring>
using namespace std;
const int N = 101;
int A[N];
int B[N];

int main()
{
    string strA, strB;
    memset(A,0,sizeof(A));
    memset(B,0,sizeof(B));
    cin>>strA>>strB;    
    int lenA = strA.size(), lenB = strB.size(), i, sum = 0;
    int maxLen = lenA>lenB ? lenA:lenB;
        //字符串反转存入数组
    for(i = 0; i < lenA; i++)
    {
        A[i] = strA[lenA - i-1] - '0';
    }
    for(i = 0; i != lenB; i++)
    {
        B[i] = strB[lenB - i -1] - '0';
    }
    //计算A+B,将计算后的结果保存到数组A中
    for(i=0; i<maxLen; i++)
    {
        A[i] += B[i] + sum;
        sum = A[i]/10;
        A[i] %= 10;
    }
    if(sum > 0)
        cout<<sum;
    
    for(i=maxLen-1;i>=0; i--)
        cout<<A[i];
    cout<<endl;
    return 0; 
}

 

 

 

 

 

 

 

posted on 2013-04-05 17:41  AllieLee  阅读(211)  评论(0编辑  收藏  举报