# -*- coding:utf-8 -*-
class Solution:
def NumberOf1Between1AndN_Solution(self, n):
# bit 代表位数 个位 十位 百位
# high代表高位 low代表当前位数的更低位
# 502223 bit = 100 high = 502 low = 23
# cur = num/bit%10
# cur > 1 : (high + 1) * bit
# cur = 1 : high * bit + (1+low) 自身1 + 23个1即:100~123
# cur = 0 :high * bit 0~4 = 5
bit = 1
sum = 0
while(bit <= n):
cur = (n // bit) % 10
# 213 % 1 = 0
low = n % bit
high = n // bit // 10
if cur > 1:
sum += (high + 1) * bit
elif cur == 1:
sum += high * bit + (1+low)
else:
sum += high * bit
bit = bit * 10
return sum