题解 | 大数乘法
大数乘法
https://www.nowcoder.com/practice/c4c488d4d40d4c4e9824c3650f7d5571
class Solution { public: //两个字符串相加 string SumString(string& s, string& t) { //s -- 总 //t -- 新 string str; int i = s.size() - 1; int j = t.size() - 1; int ret = 0; while (i >= 0 || j >= 0) { int sum = 0; if (i >= 0) { sum += s[i] - '0'; i--; } if (j >= 0) { sum += t[j] - '0'; j--; } sum += ret; str += sum % 10 + '0'; ret = sum / 10; } if (ret) str += ret + '0'; // s --> "99" // t --> "990" //9801 -->需要翻转 reverse(str.begin(), str.end()); return str; } string solve(string s, string t) { if(s[0] == '0'||t[0] == '0')return "0";//如果有一个字符串为0,直接返回 // write code here string str;//总字符串 for (int i = s.size() - 1; i >= 0; i--) { string s1; int ret = 0; //用s字符串中的每一个数字字符去乘以t字符串整个字符 for (int j = t.size() - 1; j >= 0; j--) { int sum = (t[j] - '0') * (s[i] - '0') + ret; s1 += sum % 10 + '0'; ret = sum / 10; } if (ret) s1 += ret + '0'; //翻转字符串 reverse(s1.begin(), s1.end()); //进位逻辑 int cnt = s.size() - 1 - i; while (cnt--) { s1 += '0'; } //第一次的字符串结果作为总字符串结果 if (i == s.size() - 1) { str = s1; } else { //处理两个字符串相加的逻辑 str = SumString(str, s1); } } return str; } };#00后45度躺现状#