- 请编写一个方法,输出0到n(包括n)中数字2出现了几次。
- 给定一个正整数n,请返回0到n的数字中2出现了几次。
- 测试样例:10 返回:1
int count = 0;
int low = 0;
int high = 0;
int cur = 0;
int flag = 1;
while(n/flag!=0)
{
low = n-(n/flag)*flag;
cur = (n/flag)%10;
high = n/(flag*10);
if(cur == 1 || cur == 0)
count += high*flag;
if(cur == 2)
count += high*flag + low +1;
if(cur > 2)
count += (high+1)*flag;
flag *= 10;
}
return count;
}
分析的时候有一点注意:是单独的某一位是2,例如百位为2,千位为2,不一起考虑同时为2;
int count1Num(int num) {
int higherNum = 0;
int lowerNum = 0;
int currNum = 0;
int factor = 10;
int total1Count = 0;
while (factor / 10 < num) {
higherNum = num / factor;
currNum = (num % factor) / (factor / 10);
lowerNum = num % (factor / 10);
System.out.println(higherNum + " " + currNum + " " + lowerNum);
if (currNum == 0) {
total1Count += higherNum * (factor / 10);
} else if (currNum == 1) {
total1Count = total1Count + higherNum * (factor / 10) + lowerNum + 1;
} else {
total1Count += (higherNum + 1) * (factor / 10);
}
factor *= 10;
}
return total1Count;
}