2022-09-15-数巅科技-今年成立-昨天一面今天二面
昨天一面是电话半小时,今天二面是腾讯会议,先做了个题。
两个字符串相乘
问有没有什么错误
我说没考虑负数,
他说没考虑异常,可能有什么异常,
我说应该考虑非数字字符、非正负号,用throw
他说抛异常和返回空字符串有什么区别
我说可以给出错误原因
他说代码里还有个小错误
我说没找到
他说string_one_mul
传参传的是一个字符,没有减'0'
这个错误做招银外包笔试时也做错了。
#include <iostream> #include <vector> #include <string> using namespace std; string string_one_mul(const string &a, int b, int zeros) { string res = ""; int c = 0; // 进位 int t; for (int i = a.length() - 1; i >= 0; i--) { t = b * int(a[i] - '0') + c; res.append(string('0' + t % 10, 1)); c = t / 10; } if (c > 0) res.append(string('0' + c, 1)); reverse(res.begin(), res.end()); res.append(string('0', zeros)); return res; } string string_add(const string &a, const string &b) { string res = ""; int c = 0, t; for (int i = 0; i < max(a.length(), b.length()); i++) { if (i >= a.length()) { // b c = c + b[i] - '0'; res.append(string(c % 10, 1)); c = c / 10; } else if (i >= b.length()) { // a c = c + a[i] - '0'; res.append(string(c % 10, 1)); c = c / 10; } else { c = c + (b[i] - '0') + (a[i] - '0'); res.append(string(c % 10, 1)); c = c / 10; } } if (c > 0) res.append(string('0' + c, 1)); reverse(res.begin(), res.end()); return res; } string multiply(const string &a, const string &b) throw exception // n m mn O(max(n,m)) = O(n+m) = O(4n) { string res = "", t; for (int i = 0; i < b.length(); i++) { t = string_one_mul(a, b[i]-'0', b.length() - i - 1); res = string_add(res, t); } return res; } int main() { return 0; }#23秋招##23届秋招##创新创业##面试##23届秋招笔面经#