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届秋招笔面经#