|
发表于 2020-8-29 23:55:00
|
显示全部楼层
- #低位不够,向高位借
- if temp<0:
- # 测试高位是否有得“借”,没得借的话向再高位借......
- i=1
- while self.lasted[index-i]<1:
- self.lasted[index-i]+=self.borrow[index-i]-1
- self.lasted[index-i-1]-=1
- i+=1
复制代码
看这几行代码,这是原来的代码,给你讲一下
假设,现在self.lasted赢计算出来前几位了假设是[9,5,1,1,0]。
现在计算最后一位 秒 。index=5,得到的temp是-2,小于0,需要借位,进入if语句块,i=1,
第一次判断while循环
while判断它的上一位,也就是现在数组中的最后一个,为0,小于1,那么需要进入while循环,向再上一位借位
执行 self.lasted[index-i]+=self.borrow[index-i]-1 ,lasted列表的最后一位原来为0,变为 0+60-1=59,这一位是正常的没问题。
然后执行 self.lasted[index-i-1]-=1 , lasted列表的倒数第二位自减1,原来为1,变成了0
i+=1,i=2
第二次判断while循环
while判断它的上一位,也就是现在数组中的倒数第二个,为0,小于1,那么需要进入while循环,向再上一位借位
执行 self.lasted[index-i]+=self.borrow[index-i]-1 ,lasted列表的最后一位原来为0,变为 0+24-1=23,这一位出错了吧,正常情况下原来这里是1,借一下之后变为0,然后就不用再借了,但是while的条件是小于1就继续循环,所以就再借了。
然后执行 self.lasted[index-i-1]-=1 , lasted列表的倒数第二位自减1,原来为1,变成了0
i+=1,i=3
第三次判断while循环条件,和第二次一样,也会出错
也就是说若借位的时候,遇到了1,那么就会借位出错 |
|