活跃农民
- 积分
- 418
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2018-3-21
- 最后登录
- 1970-1-1
|
本帖最后由 jgao93 于 2021-2-22 16:44 编辑
写了个C++版本
- class Solution {public:
- string addStrings(string num1, string num2) {
- bool neg1 = num1[0] == '-';
- bool neg2 = num2[0] == '-';
- if (neg1) num1 = num1.substr(1);
- if (neg2) num2 = num2.substr(1);
- if (neg1 && neg2) {
- return "-" + Sum(num1, num2, true);
- } else if (!neg1 && !neg2) {
- return Sum(num1, num2, true);
- }
- int m = num1.size(), n = num2.size();
- if (m < n || (m == n && num1[0] < num2[0])) {
- string sum = Sum(num2, num1, false);
- return neg1 ? sum : "-" + sum;
- }
- return Sum(num1, num2, false);
- }
- private:
- string Sum(string num1, string num2, bool plus) {
- int m = num1.size(), n = num2.size();
- int i = m - 1, j = n - 1;
- int c = 0;
- string result;
- while (i >= 0 || j >= 0) {
- int a = i >= 0 ? num1[i--] - '0' : 0;
- int b = j >= 0 ? num2[j--] - '0' : 0;
- int sum = plus ? a + b + c : a - b + c;
- if (sum < 0) c = -1, sum += 10;
- else if (sum >= 10) c = 1, sum -= 10;
- else c = 0;
- result.push_back('0' + sum);
- }
- if (c > 0) result.push_back('0' + c);
- while (result.size() > 1 && result.back() == '0') {
- result.pop_back();
- }
- reverse(result.begin(), result.end());
- return result;
- }
- };
复制代码
|
|