C++之整数相加

1.题目描述

请设计一个算法能够完成两个用字符串存储的整数进行相加操作,对非法的输入则返回error

输入描述:

输入为一行,包含两个字符串,字符串的长度在[1,100]。

输出描述:

输出为一行。合法情况输出相加结果,非法情况输出error

示例1
输入

123 123
abd 123

输出

246
Error

2.源代码(分析在代码中)

#include <iostream>
#include <sstream>
#include <vector>
using namespace std;
bool isDigit(char c)
{
    if(c >='0'&&c<='9')
        return true;
    return false;
}
string getSum(string num1,string num2)
{
    //获得字符串的大小
    int sizeNum1 = num1.size();
    int sizeNum2 = num2.size();
    int big =0;
    //判断哪个数更大
    sizeNum1>=sizeNum2 ? big = sizeNum1:big = sizeNum2;
    //用来保存相加的数
    vector<int> sum(big,0);

    //先把一个字符串中的数加到sum中
    int index = 0;
    for(int i=sizeNum1-1;i>=0;--i)
    {
        if(!isDigit(num1[i]))
            return string("error");
        sum[index] = num1[i]-'0';
        index++;
    }
    //继续把另外一个数加到数组中
    index = 0;
    for(int i=sizeNum2-1;i>=0;--i)
    {
        if(!isDigit(num2[i]))
            return string("error");
        sum[index] += num2[i]-'0';
        index++;
    }
    //如果num1是 55,num2是 88,那么sum中保存的数据,每一位应该是13,13,这个时候需要进位
    //因为最后一位比较特殊,只需要加上进位数就可以了

    int jinwei=0;
    for(int i=0;i<big-1;++i)
    {
        int num = sum[i];
        sum[i] = num%10 + jinwei;
        jinwei =num/10;
    }
    //这个时候,sum中每一个元素应该是3,13,jinwei = 1,

    sum[big-1] +=jinwei;

    //最后sum中每一位元素应该是3,14
    //使用stringstream来保存逆序保存sum中的数
    ostringstream osstr;
    for(int i=big-1;i>=0;--i)
        osstr<<sum[i];

    //osstr应该是143
    return osstr.str();
}
int main()
{
    string num1,num2;
    while(cin>>num1>>num2)
    {
        cout<<getSum(num1,num2)<<endl;
    }
    return 0;
}

3.测试

输入:

999 999

输出:

1998

输入:

999 9L9

输出:

error

猜你喜欢

转载自blog.csdn.net/zqw_yaomin/article/details/82432044
今日推荐