# -*- coding:utf-8 -*-
class Solution:
    def NumberOf1Between1AndN_Solution(self, n):
        # write code here
        strN = str(n)
        size = len(strN)
        sum = 0

        # 从个位开始
        for i in range(size - 1, -1, -1):
            curBit = int(strN[i])
            multiValue = pow(10, size - 1 - i)
            if i == 0:
                biggerValue = 0
            else:
                biggerValue = strN[0:i]
            if i == size - 1:
                smallerValue = 0
            else:
                smallerValue = strN[i + 1:]

            if curBit == 1:
                count = int(biggerValue) * multiValue + int(smallerValue) + 1
            elif curBit == 0:
                count = int(biggerValue) * multiValue
            else:
                count = (int(biggerValue) + 1) * multiValue

            sum += count

        return sum


s = Solution()
print s.NumberOf1Between1AndN_Solution(13)