首页 > 试题广场 >

从1到2048的所有整数职工1的出现的个数是()

[单选题]
从1到2048的所有整数职工1的出现的个数是()
  • 1600
  • 1615
  • 1011
  • 1200

正确答案是B(1615)

数字2048中, 
* 个位出现的1 = `204*1+1 = 205` 
* 十位出现的1 = `20*10+10 = 210` 
* 百位出现的1 = `2*100 = 200` 
* 千位出现的1 = `0*1000+1000 = 1000`

因此,一共出现的次数为`205+210+200+1000 = 1615`。

代码实现如下。

//C++

class Solution {
public:
    int countDigitOne(int n) {
        if(n<1){
            return 0;
        }
        int count = 0;
        int base = 1;
        int round = n;
        int weight;
        while(round>0){
            weight = round%10;
            round /= 10;
            count += round*base;
            if(weight == 1){
                count += (n%base)+1;
            }
            else if(weight > 1){
                count += base;
            }
            base *= 10;
        }
        return count;
    }
};
编辑于 2017-03-29 10:47:35 回复(1)
cnt = 0
for i in range(1, 2049):
    if '1' in str(i):
        cnt += 1
print(cnt)
#1285

是我理解错误了吗

发表于 2018-09-01 09:05:38 回复(0)