整数中1出现的次数

——题目来自牛客剑指offer
——解题思路来自:这里
题目:ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。

思路:high为高位,cur为当前位,low为低位,digit为因子位

1.当 cur = 0cur=0 时: 此位 11 的出现次数只由高位 highhigh 决定,计算公式为:
high×digit

整数中1出现的次数
2.当 cur = 1cur=1 时: 此位 11 的出现次数由高位 highhigh 和低位 lowlow 决定,计算公式为:high×digit+low+1
整数中1出现的次数
3.当 cur = 2, 3, \cdots, 9cur=2,3,⋯,9 时: 此位 11 的出现次数只由高位 highhigh 决定,计算公式为:(high+1)×digit
整数中1出现的次数
其他位以此类推!