//------------------------------------整数加法---------------------------------//
/*
题目描述
请设计一个算法能够完成两个用字符串存储的整数进行相加操作,对非法的输入则返回error
输入描述:
输入为一行,包含两个字符串,字符串的长度在[1,100]。
输出描述:
输出为一行。合法情况输出相加结果,非法情况输出error
示例1
输入
123 123
abd 123
输出
246
Error
*/
/*
这个题最好用字符串做,用整数做的话很麻烦,主要是在数极大的情况下,由于计算机整
数编码的问题,各种类型的数都有自己的范围。
用字符串就不用考虑这些,进位也很好进行。
*/
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int f6()
{
string str1, str2;
cin >> str1 >> str2;
bool b1 = true, b2 = true;
//判断是否全为数
for (const auto &i : str1)
if (i < '0' || i > '9')
{
b1 = false;
break;
}
for (const auto &i : str2)
if (i < '0' || i > '9')
{
b2 = false;
break;
}
//两者都是阿拉伯数字时
if (b1 && b2)
{
int str1len = str1.size();
int str2len = str2.size();
int minlen = min(str1len, str2len);//求出最小长度
int maxlen = max(str1len, str2len);//求出最大长度
vector<int> v;
reverse(str1.begin(), str1.end());//先反转两个字符串,为了后面加法
reverse(str2.begin(), str2.end());
//加法,先把位数小的数加到大数对应位置上
for (int i = 0; i < minlen; ++i)
v.push_back((str1[i] - '0') + (str2[i] - '0'));
//大数大的位放进去
for (int i = minlen; i < maxlen; ++i)
{
if (str1len > str2len)
v.push_back(str1[i] - '0');
else
v.push_back(str2[i] - '0');
}
//进位,注意边界
for (int i = 0; i < v.size() - 1; ++i)
{
if (v[i] >= 10)
{
v[i] -= 10;
v[i + 1] += 1;
}
}
//如果最高位依然进位,就push_back(1)
if (v[v.size() - 1] >= 10)
{
v[v.size() - 1] -= 10;
v.push_back(1);
}
//输出
for (int i = v.size() - 1; i >= 0; --i)
cout << v[i];
cout << endl;
}
else
cout << "error" << endl;
return 0;
}