题目描述:输入一个整数 n,求从 1 到整数 n 的十进制表示中 1 出现的次数
思路:若百位上数字为 0,百位上可能出现 1 的次数由更高位决定;若百位上数字为百位上可能出现 1 的次数不仅受更高位。
public static int NumberOf1Between1AndN2(int n) {
if(n < 0) {
return 0;
}
int i = 0;
int count = 0;
int high = 0; int cur = 0; int low = 0;
while(n / i != 0) {
high = n / (i * 10);
cur = (n / i) % 10;
low = n - (n / i) * i;
if(cur == 0) {
count = count + high * i;
}else if(cur == 1) {
count = count + high * i + low + 1;
}else if(cur > 1) {
count = count + (high + 1) * i;
}
i = i * 10;
}
return count;
}