题目:
输入一个整数 n ,求 1 ~ n 这 n 个整数的十进制表示中 1 出现的次数。
分析一:
借鉴博客
代码一:
package offer.xzs.fourty2fourtynine.fourtythree;
public class Demo01 {
public static void main(String[] args) {
int count = getCount(12);
System.out.println(count);
}
public static int getCount(int k) {
if (k < 1) {
return 0;
}
int count = 0;
int base = 1; //从个位数开始基数为1,十位数的基数为10...
int round = k;
while (round > 0) {
//表示十进制的每一位,从各位数开始
int weight = round % 10;
//表示每一次weight位上的数要从0-9变换多少个轮回
round = round / 10;
//当weight位上为0的时候
count = count + round * base;
if (weight == 1) {
count = count + (k % base) + 1;
} else if (weight > 1) {
count = count + base;
}
//下一位的基数为前一位基数的十倍
base = base * 10;
}
return count;
}
}