TypeScript类型实现加减乘除的方法
在网上看到这道题目:请用TS类型实现整除?
看完题目,我真的毫无思路,TS类型还能实现除法???一脸懵逼的我认真地研究了一位叫做 JoeYan大佬的解答:
分析
乍一看,真的惊呆了,但是一步一步分析,还是能够看懂的,本文将整个研究的过程记录了下来:
TS类型没有直接提供数字的加减乘除,所以这位大佬的减法和整除都是通过数组长度计数来实现的。我平时体操练习很少,在没看他的解答前,我永远不会想到还能这么玩儿。
Divide
如果要实现98%10,假设A是98,B是10,让A一直减B,直到A小于B,无法继续再减,就能得到整除的结果。
A能减去9次B,每次进行减10的时候,往S(用来计数的数组,初始值为空数组)里面push一个元素。A减去9次10后,S数组的长度是9。此时A是8,B是10,A小于B,返回S的长度9。
上面这段代码的字面意思是:
- B是否为0,直接返回never
- A如果小于B,返回S的长度
- A如果大于B,我们执行A-B,然后我们给S数组push一个元素,再次计算Divide
接下来,让我们开始逐个分析。
SmallerThan
SmallerThan用于判断A是否小于B
字面上看起来是:
- S的长度等于B,返回false
- S的长度不等于B且S的长度等于A,返回true
- S的长度不等于A和B,将any推入S数组
接下来举例来看:
总之,S的长度是一次一次的累加的,先等于谁的长度,谁就更小。 如果S的长度先等于B的长度,那么就是A>B
。如果S的长度先等于A的长度,就是A<B
。
Tuple
作用是将数字转成数组,且数组的长度等于数字的大小
Subtract
顾名思义,获取A-B的值
最后
前面已经实现了整除和减法,本着练习的态度,让我们再实现一下乘法和加法。
加法
仿照前面的Subtract,不难实现:
乘法
接下来,让我们实现一下乘法:
5*6
可以看作,5+5+5+5+5+5。
A*B
,也就是A要累加自己B次。如果我们每进行一次加法,就让被乘数B减一,直到被乘数B为0,也就完成了累加。
坑点
总结
我觉得还是套路为主,在研究了别人的除法实现后,也就能很容易实现加法和乘法。但如果没有前面的研究,想破脑子也很难实现。
到此这篇关于TypeScript类型实现加减乘除的方法的文章就介绍到这了,更多相关TypeScript 加减乘除内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!