# way 1
# -*- coding:utf-8 -*-
class Solution:
    def NumberOf1Between1AndN_Solution(self, n):
        # write code here
        # -*- coding:utf-8 -*-
        precise = 1
        highValue = 1
        midValue = 1
        lowValue = 1
        count = 0
        numSum = 0
        while highValue != 0:
            highValue = n // (precise * 10)
            midValue = (n // precise) % 10
            lowValue = n % precise
            precise = precise * 10
            if midValue == 0:
                num = (highValue -1 + 1) * pow(10, count)
            elif midValue > 1:
                num = (highValue + 1) * pow(10, count)
            else:
                num = highValue * pow(10, count) + (lowValue + 1)
            numSum += num
            count += 1
        return numSum
# way 2
class Solution:
    def NumberOf1Between1AndN_Solution(self, n):
        # write code here
        count = 0
        for i in range(1,n+1):
            a = len(str(i))
            while(a):
                if (i%10 == 1):
                    count += 1
                    i = i//10
                else:
                    i =i//10
                a -= 1
        return count