中级农民
- 积分
- 108
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2012-7-31
- 最后登录
- 1970-1-1
|
// count the number of occurrence of digit 'd' in series: 1, 2, 3, ..., n.
unsigned int DigitCounting(unsigned int n, unsigned int d) {
unsigned int count = 0;
for (unsigned int i = 1; true; i *= 10) {
unsigned int q = n / (i * 10);
unsigned int r = n % i;
int dd = n / i % 10;
if (n / i == 0 || dd < d && q == 0) break;
if (dd != d) r = i - 1;
if (dd < d || d == 0) --q;
if (q >= 0) {
count += q * i + r + 1;
}
}
return count;
}
试试这个对不对,可以计算所有数字不仅仅是1 |
|