标签:相加 加法 eve als 设计 阿拉伯 判断 一个 stream
//------------------------------------整数加法---------------------------------// /* 题目描述 请设计一个算法能够完成两个用字符串存储的整数进行相加操作,对非法的输入则返回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; }
标签:相加 加法 eve als 设计 阿拉伯 判断 一个 stream
原文地址:http://www.cnblogs.com/CoderZSL/p/7768044.html