/**
* 求1 的个数
*
* 对于 abcdef 几个数字,我们求小于abcdef 的所有数据中包含的1的个数,如果 P(13) = 6 对于分析,我们能得出以下结论 如:对于 c
* 位上的数有以下三种情况 1. c=0 p= c 高位的数字 * C的位数 2. c=1 p = c 高位的数字*c的位数 + c 低位的数 3. c>1
* p = (c高位的数字+1) *c 位数
*/
public class TheNumberOfOne {
static void execute(int n) {
int factor = 1, high, low;
int count = 0;
while (n / factor != 0) { // 表示还有高位
int pos = n / factor % 10; // 当前位值
high = n / (factor * 10);
low = n - (n / factor) * factor;// 高位与低位值
switch (pos) {
case 0:
count += high * factor;
break;
case 1:
count += high * factor + low + 1;
break;
default:
count += (high + 1) * factor;
break;
}
factor *= 10;
}
System.out.println(count);
}
public static void main(String args[]) {
int n = 123;
execute(n);
}
}