document.write('
方法一:减法
 主要思路为:使被除数不断减去除数,直到相减的结果小于除数为止,此时,商就为相减的次
数,余数为最后相减的差。例如在计算14除以4的时候,首先计算14-4=10,由于10>4,继续做减
法运算:10-4=6,6-4=2,此时2<4。由于总共进行了3次减法操作,最终相减的结果为2,因此
15除以4的商为3,余数为2。如果被除数比除数都小,那么商为0,余数为被除数。根据这个思路的
实现代码如下:
 #方法功能: 计算两个自然数的除法
 def divide(m,n):
 print str(m)+"除以"+str(n),
 res=0
 remain=m
 #被除数减除数, 直到相减结果小于除数为止
 while m>n:
 m=m-n
 res+=1
 remain=m
 print "商为:"+str(res)+"余数:"+str(remain)
 if __name__=="main__":
 m=14
 n=4
 divide(m,n)
 程序的运行结果为:
 14除以4商为:3余数为:2
 算法性能分析
 这种方法循环的次数为m/n,因此算法的时间复杂度为O(m/n)。需要注意的是,这种方法也实现
了不用%操作符实现%运算的目的。
 方法二:移位法
 方法一所采用的减法操作,还可以用等价的加法操作来实现。例如在计算17除以4的时候,可以尝
试4*1,4*2(4+4),4*3(4+4+4)依次进行计算,直到计算的结果大于14的时候就可以很容易求出商
与余数。但是这种方法每次都递增4,效率较低。下面给出另外一种增加递增速度的方法:以2的指
数进行递增(取2的指数的原因是,2的指数操作可以通过移位操作来实现,有更高的效率),计算
4*1,4*2,4*4,4*8,由于4*8>17,然后接着对17-4*4=1进入下一次循环用相同的方法进行计
算。实现代码如下:
 def divide(m,n):
 print str(m)+"除以"+str(n),
 result=0
 while m>=n:
 multi=1
 # multi*n>m/2(即2* multi*n>m)时结束循环
 while multi*n<=(m>>1):
 multi<<=1
 result+=multi
 #相减的结果进入下次循环
 m-=multi*n
 print "商为:"+str(result)+"余数:"+str(m)
 
 if __name__=="__main__":
 m=14
 n=4
 divide(m,n)
 算法性能分析:

 由于这种方法采用指数级的增长方式不断逼近m/n,因此算法的时间复杂度为O(log(m/n))。 

');