“成成,经过前面2次的考验,我们项目组的leader对你很满意哟”,系统声音显得很兴奋。
“所以这次嘛,我们给你安排了一些更核心的任务——编写基础库”。
“哇塞!”,杨成两眼放光,迫不及待地想知道内容。
“在很多编程语言中,数值型变量能表示数字的大小是有上限和下限的”。
“就好比一个装水的瓶子,如果装的水太多了,就会导致一种情况——溢出”。
“而在程序中则表现为,数据丢失”,系统接着说道。
“所以,对于一些特别大的数字,我们不会用数值型变量直接来装,而是用字符串的形式”。
“但是,这就导致了一个问题:很多编程语言并没有提供或早期版本不支持大数字字符串之间的运算,必须由程序员来编写对应的库”。
“你懂我的意思嘛?”
“嗯,了解!”,杨成点了点头。
“你现在的任务是:给大整数字符串之间的加法和减法编写库函数”。
“有问题吗?”
杨成略加思索,觉得问题不大。
毕竟只是整数间的加减法,没有涉及到浮点数和乘除法的话,应该还是容易解决的。
“你放心吧,只要调出编辑器面板来写就OK啦,测试用例我们会提供的!”,系统给予他鼓励。
“好咧!”,杨成捋起袖子,说干就干。
首先对于加法,把两个输入的字符串从低位到高位对齐,将较短的字符串高位补零,让它们长短一致。
然后,从低位(个位)开始,做加法。
接着,就是小学数学的概念了:当前位相加,满10就“进位”。
算法和整数加法是一个道理,不过在程序中会使用数组来方便操作。
而大整数字符串减法的思路和加法相似:也是先把数位对齐,再每一位相减。
如果被减数当前位小于减数当前位,就向高一位“借位”,借10再来做减法。
这两个算法的实现都不复杂,但是有一些问题需要考虑好。
比如说非法数据的检测。
比如说像以一个或多个0开头的合法数据,像“00012”,该如何处理,剔除掉开头的这些0。
再比如说负整数相加减的情况,都值得注意,这样才能提高程序的健壮性。
话说,杨成辛辛苦苦地,忙活了几个小时。
然后,他一点“提交”按钮。
只听见“唰!”的一声,面板上弹出测试结果。
祖国江山一片绿!
“恭喜你!测试全部通过了!”,系统声音蹦了出来。
“叮!当前积分165分,击败了全球45%的玩家,请您再接再厉!”