最近面试,按说候选人背景也都不错吧。
我们对算法要求没那么高,业务代码为主。
因此对于各种语言的候选人,我基本都会问一道长整数加法的问题。
俩数相加,都没有符号 /没有小数点 /字符串表示 返回和 /用字符串表示
这题难吗?
考察的知识点点挺广的:
字符串 /数组操作,循环控制,流程逻辑,边界条件等等。
这也基本上是编程的时候经常能遇到的问题。
但是我遇到的面试者写的千奇百怪的都有:
idx ** 10
等等吧
所以如果你遇到这个题,如何优雅的写一个 a+b?
稍后我写一个我自己花了一小点时间写的答案,八行,没有很过分的压缩代码 我的代码大概长这样:
function add(a, b) {
let ...
some magic {
cast something
cast other
}
return ...
}
正经逻辑三四行写完,晚一些我贴条的方式公布我的答案。
如果要你写,你写啥?
101
Boyce 2020-08-20 14:52:07 +08:00
@XisucksYi 大佬就是不一样(没讽刺),我校招时同学,社招时同事就只见过一个技术面试没准备的,其他的都刷过题,背过面经。
|
102
raysonlu 2020-08-20 15:02:15 +08:00
能解决业务的代码才是好代码
|
103
phpfpm OP 在开会,集中回复下各位。
@InkStone 是,我面试也写不出这样的代码,只是炫技而已。 @fengmumu 我没有说一定不能 reverse,我的点在于用 reverse 表示自己对循环的控制不好,真的太多候选人只会写一种 for 了,不要断章取义。 而且我的引导+优化的时间都有给,比如我会直接 challange 为什么需要 reverse,看下候选人是否能想到这层优化。 我相信面试者在写这道题的时候会尽自己最大的可能性去完成,如果这个做不好平时工作做一些逻辑的东西写出来的代码一定不敢恭维。 @TrickWu 对于纯数字的 ok 的,当然没有处理很多的边界情况。炫技而已啦。 @followsin 哈哈哈你看我 id 。 @jsisjs20130824 和。。背景关系不大吧。。。这个题真的不算是算法题了啊 你们为啥都觉得这个就是算法了,就基本的字符串操作,这个太基本了吧。 @sunziren 秀儿! @murmur 不是。。字节怎么了,要是真的字节的面试官问这个就可以为所欲为了么。。 @raysonlu 我是觉得写个回文数对做业务没啥帮助,会写 kmp 也没啥帮助,但是这个考察的太基本了 |
104
Bromine0x23 2020-08-20 15:06:23 +08:00
这题也就沾一点点算法,侧重点还是在编码实现上。这个算法本身用 竖式加法/按位相加 就可以描述,但实现起来很容易写错,也很容易漏掉对各种边界条件的处理、考虑。这个是很能看出能力的
|
105
XisucksYi 2020-08-20 15:13:19 +08:00
@phpfpm "如果这个做不好平时工作做一些逻辑的东西写出来的代码一定不敢恭维", 你當人家不會用 Google? 誰寫代碼直接寫? 誰不是直接 copy 過來改的?
|
106
myself659 2020-08-20 15:14:35 +08:00
用 c 基本上不用 10 分钟可以写完
|
107
Marstin 2020-08-20 15:18:06 +08:00
function add(num2,num1){
let numArr1 = num1.split(""),numArr2 = num2.split(""),res = [],flag = 0,sum = 0; while(numArr1.length > 0 || numArr2.length > 0){ sum = Number.parseInt(numArr1.pop()||'0') + Number.parseInt(numArr2.pop()||'0') + flag; flag = parseInt(sum/10); res.push(sum%10) } return [...res,flag||""].reverse().join(""); } |
108
Marstin 2020-08-20 15:19:51 +08:00
写是能写出来的,就是要一边写一遍百度,思路知道,但是 api 记不住啊,比如取最后一位,逆转,还有字符串转 int,全都要百度
|
109
thinkdeep 2020-08-20 15:27:22 +08:00 1
只能说楼主能力不行,思维僵化,看见这种人就反感,非常反感,自以为是,还在纠结这小小问题,技术能力 99%肯定不怎么样,多面试几方面,有可能会发现不一样的地方。
|
111
moooookey 2020-08-20 15:32:19 +08:00
回字有几种写法
|
112
buffzty 2020-08-20 15:38:31 +08:00
我就是你说的那种写几十行的,我没刷过算法,就随手写 怎么快怎么来,没必要损别人. 如果人家面试的提前准备一下 刷点题 估计很多被你刷掉都能秒你啊
```go func bigIntAdd(a, b string) string { var res string var maxLen int aLen := len(a) bLen := len(b) if bLen > aLen { maxLen = bLen a = strings.Repeat("0", bLen-aLen) + a } else { maxLen = aLen b = strings.Repeat("0", aLen-bLen) + b } if maxLen == 0 { return "0" } sumArr := make([]byte, maxLen+1) sumArr[0] = '0' for i := maxLen; i > 0; i-- { sumArr[i] += a[i-1] + b[i-1] - '0' } for i := maxLen; i > 0; i-- { if sumArr[i] <= '9' { continue } sumArr[i] -= 10 sumArr[i-1]++ } res = strings.TrimLeft(string(sumArr), "0") return res } ``` |
113
calpes 2020-08-20 15:38:32 +08:00 10
讲道理,第一这题没什么实际意义,考察这种没有使用场景的 string 操作不如考察各种 substring 之间的骚操作,起码有的时候还能用到,非要让人实现一个竖式计算器有点愚蠢
第二,我年轻的时候也喜欢把代码写的很酷炫,什么位运算啦什么元编程啦什么 magic number 啦,但是现在除了一些 functional 的写法,我都不会在涉及工程开发的项目里用了,就算用也要把原理写的明明白白的,作为一个合格的工程师,写出来的代码提供良好的可读性,可以让傻子都轻松看懂,是一种义务 |
114
nevin47 2020-08-20 15:42:44 +08:00
LZ 没毛病
长整数运算,就算是没准备,临场了也想不出来的,不指望后面能写出啥好代码 |
115
phpfpm OP |
118
TypeError 2020-08-20 16:01:24 +08:00 via Android
思路很简单,但是如果纸上 bug free 代码就麻烦得很
|
119
Nich0la5 2020-08-20 16:06:54 +08:00 via Android
我一直以为手写高精度是基本功
|
120
phpfpm OP |
121
ipoh 2020-08-20 16:10:14 +08:00
看了下楼主的 Emca Script 版本,问题也挺大的
只要实现里面用了加法(有加号)都要考虑一下该次加法是不是长整数加法 |
123
phpfpm OP |
124
fengmumu 2020-08-20 16:20:43 +08:00
@phpfpm 如果是,给出问题,等待解决,看代码,提示可以优化的地方,看反应,这个我表示支持,但是对于代码风格或者‘优雅’挑毛病的,表示面试官是傻逼
|
125
fengmumu 2020-08-20 16:25:26 +08:00
@XisucksYi 就题目来说我觉得还好,总比问 api 的好太多,就是感觉楼主吐槽的地方有点怪,不知道他想说的是面试人的写法不行还是逻辑思维不行,还是基础知识不行,另外就是标题取得有点招骂
|
127
phpfpm OP @fengmumu 标题嘛那么回事啦,这个确实是我写的欠妥。
工作若干年面试的人数也好几百了,对于面试中遇到的问题,评价以及入职之后的表现的相关程度有一定感知。 通过面试的不一定太好,但是至少也不至于太差。 打个比方,真的不要指望只会写 for i=1 to n 的人在实际业务中能写出漂亮的代码。 提示不要用 reverse 的本质也是考察会不会变通的写循环代码,仅此而已。 |
128
Reapper 2020-08-20 16:33:02 +08:00
切割,循环,加法,进位,这样的回答可否?
|
129
ziwiwiz 2020-08-20 16:36:26 +08:00
简单的思路就是两个字符串都 pop 出来相加进位,结果再反转下。
string add(string a, string b) { string res; int i = 0; while(!a.empty() || !b.empty()) { int x = i; if(!a.empty()) { x = x + a.back() - '0'; a.pop_back(); } if(!b.empty()) { x = x + b.back() - '0'; b.pop_back(); } i = x/10; x = x%10; res.push_back('0'+x); } if(i) res.push_back('1'); string result; while(!res.empty()) { result.push_back(res.back()); res.pop_back(); } return result; } |
130
yaphets666 2020-08-20 16:41:54 +08:00
大学上的第一门课 第一页 第一个字是啥? 不记得说明基本功很差
|
132
thinkdeep 2020-08-20 16:58:52 +08:00 1
@phpfpm 你这样问一个应届生没啥,但是问一个资深的程序员,人家会感受到不重视,感受到不礼貌,毫无信任感,问一些跟资深程序员相匹配的问题才是重点,从另一方面来说,如果问这种简单的问题,反应了面试管的能力差,毫无区分度,即使后面面试好坏,第一步就已经面试失败了,即使是个大牛心里也会打鼓,不要尝试去挑战底线,明知会反感,还这样问就是无知。就像很多人问程序员你会不会修电脑,类似这种问题,所以面试还是一个学问,在不引起面试者反感的情况下,尽可能完全的了解面试者的能力。
|
133
lzlee 2020-08-20 17:01:14 +08:00
我不觉得, 这能说明什么本质上的问题
不投缘吧 换个角度 如果一个面试者说, 某个面试官面试问了这道题, 那这个公司肯定不行 你看了你是什么想法 一道题说明不了什么问题, 面试那么长时间, 一些列的沟通从经历到语言描述, 再到沟通能力, 学习能力 这些东西不比这道题有意思的多吗? |
136
ipoh 2020-08-20 17:09:45 +08:00
正确的解法 /提问,给几个简单的位操作和内存访问指令,实现长整数加法
|
138
Mohanson 2020-08-20 17:17:16 +08:00 via Android
题目水平可以再难一点,比如如何从半加器开始实现加法
|
139
ipoh 2020-08-20 17:18:40 +08:00
|
140
buffzty 2020-08-20 17:27:40 +08:00
我觉得问这个题可以,而且很简单. 但是楼主说话一股崽种的味道. 别人完成就行,非要跟你写法一样才行是吗?
抓到一点就黑,自己单词写错了 还说别人? 而且单词拼错,api 记不住这种是技术能力问题吗 |
141
aguesuka 2020-08-20 17:32:44 +08:00 via Android
这是一个好题目,可以过滤掉不会写代码和稍微有点心气的求职者。配合笔纸写代码效果更佳
|
142
xwhxbg 2020-08-20 17:35:36 +08:00 9
楼主,这是我恰好知道所以你必须知道的典型例子啊
既然楼主觉得 big int 加法写不出来就是没有 coding 能力,请问楼主能手写一个反向传播梯度下降的神经网络库吗? 不能==没有 coding 能力? 虽然手写反向传播在机器学习领域是一个入门问题,但是对于不是写机器学习库的人以及平时搬砖的码农,这个问题现场写八成写不出来 以楼主的“coding 能力标准”,现场能写成这样的,要么是神仙,要么是背过题,什么边界条件检查,什么循环控制,字符串操作都是虚的,就是考验选手背过跟考官一样的题没 2020 年了,边界检查还通过拍脑袋想实现么?都是通过写测试用例,反复完善边界检查,反复修正逻辑实现的 软件工程不是考验大家拍脑袋的能力,而是通过一套系统的相对完善的方案去实施一个工程,过程中通过工程上的设计尽量避免或者减少错漏 以楼房建造为例,楼主可能是 MIT 博士,设计了一种高效又好用的砖,但是这个砖如果没博士学历连使用说明书都读不懂,而其他人设计的砖虽然效率可能只有楼主的 60%,而且不是那么好用,但是高中毕业就能用,并且通过简单的约束甚至能达到 65%的效率 如果楼主跟我类似也是小公司 CTO 这种档次的话,建议招人优先考虑执行力和用搜索引擎的能力,我的感受是我设计一套实现方案,也许包含 TDD,持续集成等等比较繁琐的东西,甚至还有 git hook 防止提交错误代码,但是我不希望执行者通过--ignore 来忽略这些 也许执行者有他自己的想法,有时甚至很好,但是工程问题很少是技术问题,我的优先级是 work,correct,最后才是 fast,也许大佬起手就是想 fast,但是我要考虑大佬离职以后,我招个刚毕业的学生能个把月上手大佬的代码,我得要求大佬写最基本的语法,最低的技术含量,实现最基本的功能 这样即使大佬有些边界条件没检查到,其他人也能上手慢慢完善 如果楼主是达摩院招研发就忽略我的言论哈 |
143
beidounanxizi 2020-08-20 17:45:59 +08:00
出 coding 没什么问题 抛开招聘条件和薪资待遇
就单单楼主是高考出卷老师 你觉得出字符串的整数相加 就 能考察应聘面试者的基本能力么? 要是我是考生 我就喷了。 建议 有备选题目 做不出也不是什么见不得人的事 |
144
JerryCha 2020-08-20 17:48:37 +08:00
appendix II 基本就是 LeetCode 链表加法的做法了吧
|
145
lake325 2020-08-20 17:52:48 +08:00
楼主如果不事先有准备,能用这么短的代码实现吗?
|
146
phpfpm OP @buffzty 我发了那么多讨论你都看不见抓到一点就黑的是你吧。。。。。
@beidounanxizi 把讨论看完。这道题是高效筛选不合适的面试者的题。 @Mohanson 不 那就没人了。 @ipoh 杠将军你好~ @beidounanxizi 当然有备选题目,但是备选的更难。而且这个题目相当有区分度。 @xwhxbg 逻辑上来说你的题目更难,所以区分度更差 |
147
knowckx 2020-08-20 18:02:58 +08:00
leetcode 415 刷过类似的题应该就做得出
|
148
gaocc 2020-08-20 18:07:45 +08:00 2
招的人主要是来写业务的是吧
个人觉得考校沟通能力和读代码能力,比写一道技术题来的直接。 比如拉出一个可对外的项目代码,给个需求,让读个 20 分钟代码,问解决方案。观察下对方先后怎么处理的,是来确认需求,还是闷头看代码,还是去跑项目等等。 看人处理问题方式,能看出的东西比较多。 |
149
ipoh 2020-08-20 18:08:22 +08:00
|
150
gaocc 2020-08-20 18:12:36 +08:00
@gaocc 补一句,我看到题第一反应是,这需求描述都不清晰,不合理不想做哈哈哈哈。较真自己做,也是做不好,我也是业务类同学,经常觉得读代码然后‘借用’,会比自己想逻辑写代码,实际效果好,速度快。
注:搞底层的同学切勿模仿这心态 hhhh |
151
ZehaiZhang 2020-08-20 18:16:47 +08:00
刷 leetcode 刷到过印象,不过不是很清楚 lz 的 Emca Script (也许应该是 Ecmascript ),记得是 JavaScript 的标准,而不是语言,这个两个词语日常是等价的吗?
|
155
XisucksYi 2020-08-20 19:19:05 +08:00
func addStrings(num1 string, num2 string) string {
var res []int = make([]int, 0, 0) var carry int = 0 for p1, p2 := len(num1) - 1, len(num2) - 1; p1 >= 0 || p2 >= 0; p1, p2 = p1 - 1, p2 - 1 { var x1 int = 0 var x2 int = 0 if p1 >= 0 { x1 = int(num1[p1] - '0') } else { x1 = 0 } if p2 >= 0 { x2 = int(num2[p2] - '0') } else { x2 = 0 } var value int = (x1 + x2 + carry) % 10 carry = (x1 + x2 + carry) / 10 res = append(res, value) } if carry > 0 { res = append(res, carry) } for i := 0; i < len(res) / 2; i = i + 1 { res[i], res[len(res) - i - 1] = res[len(res) - i - 1], res[i] } var result string = strings.Trim(strings.Replace(fmt.Sprint(res), " ", "", -1), "[]") return result } 這樣? |
156
zhangzhang 2020-08-20 19:22:12 +08:00
我想起来 noip 必背的几个算法里面就有高精度加减乘除,因为当时不开放 Pascal 的 int64 。。。
|
157
XisucksYi 2020-08-20 19:25:42 +08:00
這個鳥題跟 leetcode 第二題差不多, 就是第二題可以直接加, 這個要 reverse 一次.
第二題還更有意義點, 這個題平時誰不用 built-in, 誰去這樣寫? |
158
blurryWu 2020-08-20 19:34:10 +08:00
作为一个应届生或则在校大学生考察这个问题我觉得没啥问题,如果是考社招的话,刷题和算法就不是筛选的必选项了吧.作为在校学生贴个代码吧
```C++ void add_string(string& ans, string cur, int cnt) { string str1(ans); for (int i = 0; i < cnt; ++i) cur.insert(0, "0"); string str2(cur); int l1 = 0, l2 = 0, carry = 0; string s; while (l1 < str1.size() || l2 < str2.size()) { int tmp = 0; tmp += carry; if (l1 < str1.size()) { tmp += str1[l1] - '0'; l1++; } if (l2 < str2.size()) { tmp += str2[l2] - '0'; l2++; } carry = tmp / 10; s.push_back(tmp % 10 + '0'); } if (carry) s.push_back(carry + '0'); ans = s; return; } |
159
XisucksYi 2020-08-20 19:34:43 +08:00
講錯了, 從前面 append 就不需要 reverse 了
func addStrings(num1 string, num2 string) string { var res []int = make([]int, 0, 0) var carry int = 0 for p1, p2 := len(num1) - 1, len(num2) - 1; p1 >= 0 || p2 >= 0; p1, p2 = p1 - 1, p2 - 1 { var x1 int = 0 var x2 int = 0 if p1 >= 0 { x1 = int(num1[p1] - '0') } else { x1 = 0 } if p2 >= 0 { x2 = int(num2[p2] - '0') } else { x2 = 0 } var value int = (x1 + x2 + carry) % 10 carry = (x1 + x2 + carry) / 10 res = append([]int{value}, res...) } if carry > 0 { res = append([]int{carry}, res...) } var result string = strings.Trim(strings.Replace(fmt.Sprint(res), " ", "", -1), "[]") return result } 媽的, 這個題真的噁心 |
161
b00tyhunt3r 2020-08-20 19:46:13 +08:00
楼主不是科班吧,还是前端的?
这“题”用函数式或者低级语言有任何难度可言吗,这能招到什么神仙。。 |
162
XisucksYi 2020-08-20 19:53:40 +08:00
因為 JSON 不支持 BigInt, 真實情況對於 JS, 直接轉換成 BigInt 處理, 處理完再轉回 string.
對於沒有 JS 那種情況的語言直接轉換成 int64, 處理完再轉回 string. 這題主要就是針對 JavaScript, 應該是出現在 BigInt 推出之前. |
163
glfpes 2020-08-20 19:53:58 +08:00
这好像是 leetcode.cn 的第二题,只不过第二题输入是 1 个链表。
|
165
sinORcos 2020-08-20 20:02:23 +08:00
作为程序员,我可能不是楼主的对手,毕竟楼主开着会还在百忙之中抽出时间来回复大家。
我就说两点: 第一,不知楼主在何处高就,会对代码提出“优雅”这种要求,说到底,“优雅”的代码究竟算是个什么评价标准? 第二,我很不爽楼主这种不好好说话非要夹带个英文单词的,如果你带的是专用名词或者使用中文很难做到信达雅的也就算了,“get 到足够多的信息”算什么鬼?就感觉楼主这人本身缺少教养,很不懂礼貌。 |
166
ipoh 2020-08-20 20:03:01 +08:00
|
170
XisucksYi 2020-08-20 20:07:48 +08:00
@glfpes 鏈表的話, 真實情況就是直接遍歷 next node 來處理啊, 他這個真實情況誰吃太飽去這樣處理, 肯定用 BigInt 啊
|
172
Exin 2020-08-20 20:15:11 +08:00
技痒参与一下,递归做的,不一定对(应该没人无聊到说非要把递归写成循环的形式才叫算法解法吧?
```js function add(a, b, ai = 1, bi = 1, carry = 0, tail = "") { if (a.length < ai && b.length < bi) return (carry || "") + tail; const sum = parseInt(a[a.length - ai] || "0") + parseInt(b[b.length - bi] || "0") + carry; return add(a, b, ai + 1, bi + 1, sum > 9 ? 1 : 0, (sum > 9 ? sum - 10 : sum) + tail); } ``` |
173
loryyang 2020-08-20 20:15:40 +08:00
这种题目写不出,我一般直接就 fail 了。这种代码已经比较接近业务代码了,循环然后做处理。说实话,如果不准备过,快排比这种题目难写,因为快排边界和终止条件很难写正确,思维上面难度更大。相比较而言,要难一点的话,我更倾向出树这个结构的题
另外,面试官对代码写法提出各种要求是极为常见的考察手段,这是观察面试者对知识的掌握程度。能灵活写出多种解法的人,才有可能对代码进行更合理的重构,得到更优的写法 |
175
ipoh 2020-08-20 20:18:39 +08:00
@XisucksYi 对,leetcode 上面是有考虑到这个问题的。其实这是一个很常见的错误,提问者自己也没考虑到,也不知道他有没有 coding 能力
|
177
zhuangzijun1996 2020-08-20 20:41:06 +08:00 via Android
@phpfpm 写代码优先考虑的难道不是可读性和思考难度么 显然倒一倒至少看起来会舒服很多。。
|
178
XisucksYi 2020-08-20 20:48:53 +08:00
@ipoh 那就把遍歷的方式從 length 改成 remove 最後一個字符, 一個個取出來處理, 直到兩個 string 都為 "" 為止
|
180
liuminghao233 2020-08-20 21:11:26 +08:00 via iPhone
这个不难
但不是 |
181
vanxy 2020-08-20 21:29:23 +08:00
业务代码为主,如果有人写的代码类似楼主解法这样带位运算的,是会被接手的人打死的。
|
182
XisucksYi 2020-08-20 22:02:13 +08:00
@phpfpm 這題的目的就是針對 JS 的, 之所以傳入的參數是 string 是因為 JS 的 Number 限制, 要加到轉換成 string 才行, 所以肯定是超出 Number 的限制的, 你這樣直接取 length, 如果在 JS 裡, string 長度超出 Number 的精度, 肯定報錯, 但就是因為肯定是超出 Number 精度, 這才是參數是 string 的意義所在. 這也是這題的背景意義, JS 的 BigInt 出來之前處理 JSON 中的 string 的辦法.
像你這樣根本沒想過為什麼參數是 string 就不知羞恥的搞一個什麼篩選面試者, 你要是碰到沒耐心的, 打到你躲到派出所都沒用. |
183
phpfpm OP @XisucksYi 我真的不明白这个点为啥可以杠这么久,查查标准吧
(虽然我都说不想回了就回一句这个) https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/length string 的最长长度就是 int max, 2^53 -1 如果两个数都是这么长,和是 2^53 的长度,无法用 string 来表示,无法用字符串去输出 而不是一个长度合法的字符串的和的长度无法用 int 来表示。 再说 2e53byte=2e43KiB=2e33MiB=2e23GiB = 2e13TB = 8PB 你认真的吗? 抓住这个不放就是杠。 |
185
XisucksYi 2020-08-20 22:24:38 +08:00
@phpfpm 這跟 string 的最大長度有什麼關係, Number 的最大值為 9007199254740991, 如果 string 為 "90071992547409911" 呢? 取 length 是不是報錯?
你真的是沒搞懂這題的意義, 就這樣你還面試個鬼 |
187
phpfpm OP |
188
laminux29 2020-08-20 22:35:41 +08:00
出题人,也就是题主,很熟悉某类问题,并且觉得,大部分这种工资等级的人,都能解决这个问题。
建议题主加一些面试官或 HR 群,与这些人讨论一下,这个工资等级,能按照题主的思路,解决这个问题,概率有多大。 我觉得你在这个论坛的这版块,发这个问题,作用不大。因为这种大多数人是程序员,而非面试官或 HR 。 |
189
dustinth 2020-08-20 22:50:22 +08:00
如果有人跟我讲他怎么 google 一个合格的算法库; 怎么针对这个问题设计 test case; 怎么包装隐藏第三方库不必要的复杂度, 即使他自己写不出来, 我也认为他是一个合格的工程师.
|
190
phpfpm OP |
191
billlee 2020-08-21 00:07:03 +08:00
这个是数字电路里面的基本内容吧,这都写不出来可以当作完全不懂计算机体系结构和算法了。
|
192
thinkdeep 2020-08-21 00:32:58 +08:00
这种就是我不要你觉得行不行,我要我觉得行就行。
|
193
ipoh 2020-08-21 00:40:20 +08:00 via Android
@phpfpm 无法用 js 里面的 string 表示的大数就没法处理了?那你要是在我这里面试也是不合格哦
更别说用 c 语言的怎么办,根本没 string 这个东西 楼里有正确答案你可以参考,要是想出题呢可以学学 leetcode |
195
iEverX 2020-08-21 00:48:28 +08:00 2
我理解这道题目不能称之为算法,就是考察最基本的思维能力以及代码实现能力。如果这都算是高要求,那么什么才是正常要求呢,难道一个数组遍历输出吗?
|
196
shmichaelli 2020-08-21 00:50:17 +08:00
@xwhxbg 感觉您的回答很专业,赞一个.
|
197
ipoh 2020-08-21 01:09:16 +08:00 via Android
@phpfpm 而且就算用你所谓的 js 语言限制,你的答案时间复杂度也不符合要求。
还是先优化好自己的答案再来考别人吧 |
198
ChanKc 2020-08-21 01:10:44 +08:00 via Android
emca script 是个啥
面试这种东西,你当然可以有自己的标准,反正人招进来干一段时间大家就知道你的面试标准对不对了 |
199
yangbonis 2020-08-21 01:20:56 +08:00 via iPhone
你这不就模拟了个加法器吗?和业务有关?记得上学的作业写过浮点加法器会复杂一些。
最通用的方法还是各语言明星项目模块现场加个功能,复杂功能设计起码要契合原本代码的逻辑。对面试者和面试官水平要求都高。 不懂?连明星项目都没看过也算懂 xx 语言? |
200
zongwan 2020-08-21 01:27:23 +08:00
看明白了
面试官问的问题自己都没有足够优雅的答案 从面试者的答案中学习然后不断优化找到了觉得足够优雅答案 但最后也发现了这个问题"大数"存在一定边界 如果面试者反问 "大数"超出边界, 会被当成"坚持抖机灵" --- 那么抖个机灵 最后这个问题的定义应该是 这个"大数"只准相加且存在边界 如果不存在限制就简单了, 计算出实际数字应该也就无实际意义=无需计算 加法的话直接 (m, n)=> m + '+' + n; 把结果直接写入单个 /多个文件 减法同理 乘法 (m, n)=> '(' + m + '*' + n + ')'; (写入文件时可根据文件的设计结构去掉括号) 除法同理 使用 文件夹+文件 的文件树存储就不错 例如: |-- * | |-- + | | |-- m | | |-- n | |-- b (例: b 需要多个文件表示时) | | |-- b0 | | |-- b1 以上结构表示为 ( m + n ) * b |