感觉比较麻烦,想着想着就容易思绪打结,容易懵。。
这道题是要求两个数相除的结果是什么,但是不能用乘法,除法,mod
那我们思考一下结果的含义是什么,声明一个变量res来代表结果,res就是被除数里包含的除数的个数。这里假设被除数num1,除数为num2。
假设num1=20,num2=3。1个num2=3, 2个num2=6, 4个num3=12, 8个num3=24,我们可以知道4<res<8, 最初的时候res为1,每次num2左移一位,res也跟着左移一位,因为num2变为原来的两倍,那么个数也要是原来的两倍才能达成。直到num2*2 > num1,说明此时的num2已经比num1的一半要大了,就不能在翻倍的扩大。这个时候num1减去res个num2剩下的值再拿来和最初的num2做递归,得到的个数加上res就是结果。这道题确实不是很好理解,说也有点说不清楚的感觉。。。
递归部分的代码如下:
然后这道题还有考虑边界的问题,是否达到了最大值或者最下值,这个也有点麻烦,代码如下: