Given two non-negative integers num1
and num2
represented as string, return the sum of num1
and num2
.
Note:
num1
and num2
is < 5100.num1
and num2
contains only digits 0-9
.num1
and num2
does not contain any leading zero.思路:
模拟手工加法过程,用carry表示进位。
第一个是自己写的,比较啰嗦。
第二个是参考的网上大神的,简洁。
string addStrings(string num1, string num2) { int n1 = num1.length()-1, n2 = num2.length()-1; string ret=""; int digit = 0; int carry = 0; int sum = 0; while (n1 >= 0 && n2 >= 0) { sum = carry + num1[n1--] + num2[n2--] - ‘0‘ - ‘0‘; digit = sum %10; carry = (sum >= 10) ? 1 : 0; ret += (digit+‘0‘); } while (n1 >= 0) { sum = carry + num1[n1--] - ‘0‘; digit = sum % 10; carry = (sum >= 10) ? 1 : 0; ret += (digit + ‘0‘); } while (n2 >= 0) { sum = carry + num2[n2--] - ‘0‘; digit = sum % 10; carry = (sum >= 10) ? 1 : 0; ret += (digit + ‘0‘); } if (carry) ret += ‘1‘; reverse(ret.begin(), ret.end()); return ret; }
string addStrings(string num1, string num2) { int i = num1.size() - 1; int j = num2.size() - 1; int carry = 0; string res = ""; while(i>=0 || j>=0 || carry){ long sum = 0; if(i >= 0){sum += (num1[i] - ‘0‘);i--;} if(j >= 0){sum += (num2[j] - ‘0‘);j--;} sum += carry; carry = sum / 10; sum = sum % 10; res = res + to_string(sum); } reverse(res.begin(), res.end()); return res; }
参考:
https://discuss.leetcode.com/topic/62305/c-_accepted_13ms
原文:http://www.cnblogs.com/hellowooorld/p/7123938.html