我严重怀疑这代码不是你自己写的,因为感觉你自己都不知道这个代码在干什么事情,注释都错了 不懂请不要装懂误导别人 这个代码的核心思想就是找出各个位数上1的个数,和辗转相除一点关系都没有 重新注释了一下,有兴趣的就看看吧 def NumberOf1Between1AndN_Solution(n):     temp = n     res = 0     base = 1                            # 应该是指位数,1表示个位,10表示十位....     while temp:         p = temp % 10                   # 取出当前位         temp = temp // 10         res += temp * base              # temp * base得到该位的出现次数         if p == 1:             # 如果这个位数是1,那么还要算上这个位数1出现的次数             # 举例: 1141的百位             # 上面temp * base即1 * 100算出的是1000前百位为1的个数,1100到1141百位上的1没统计到,因此最终结果还要加上42个             res += n % base + 1         elif p > 1:             # 如果这个位数大于1,那么这个位数的1还出现了base次             # 举例: 1141的十位             # 上面temp * base即11 * 10算出的是1100前十位为1的个数,1100后还有10个没统计到             res += base         base *= 10     return res
12

相关推荐

牛客网
牛客企业服务