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