题意:给出一个整数n,求从0到n之间的数中出现1的总个数
思路: 根据 high cur low(其中cur是1位),而number表示cur当前的位数(1,10,100,。。。)
当cur=0时,则有high * number
当cur =1时,则有high * number + (low + 1)
当cur>1时,则有(high+1) * number
代码如下:
public class Solution
{
public int countDigitOne(int n)
{
int sum = 0;
for (long m = 1; m <= n; m *= 10)
{
long a = n / m, b = n % m;
sum += (a + 8) / 10 * m + (a % 10 == 1 ? 1 : 0) * (b + 1);
}
return sum;
}
}