int mycount(int n,int x ){
int count = 0;
int i = 0;
for(i;i<=n;i++){
if(i < 10 && i == x){
count++;
}
else if(i >= 10){
for(int j = i;j!=0;j/=10){
int m = j%10;
if(m == x){
count++;
}
}
}
}
return count;
}
从0 - n,每个数字分别计算x出现的次数,然后相加
其他牛人的做法 : https://www.cnblogs.com/cyjb/p/digitOccurrenceInRegion.html
// 计算数字 X 在 1-n 中出现的次数。
int count(int n, int x) {
int cnt = 0, k;
for (int i = 1;k = n / i;i *= 10) {
// 高位的数字。
int high = k / 10;
if (x == 0) {
if (high) {
high--;
} else {
break;
}
}
cnt += high * i;
// 当前位的数字。
int cur = k % 10;
if (cur > x) {
cnt += i;
} else if (cur == x) {
// n - k * i 为低位的数字。
cnt += n - k * i + 1;
}
}
return cnt;
}
网友评论