2 benben8153 benben8153 于 2015.07.12 17:51 提问

【编程错误求指教】计算一个数字前的所有数字中1出现的次数

function deal(m) {
var n = 0, i = 0,h = 0;
for (; n < m + 1; n++) {
i = n;
while (i > 0) {
if ((i % 10) == 1) {
h++;
};
i /= 10;
};
};
alert(h);
};
deal(11);

计算11之前包括11数字中1出现的次数

错在哪里 11的结果是3

谢谢

4个回答

devmiao
devmiao   Ds   Rxr 2015.07.12 23:46

直接用正则表达式就可以了。

 var str = "123";
var find = "1";
var reg = new RegExp(find,"g")
var c = str.match(reg);
alert(c?c.length:0);
ipud2
ipud2   2015.07.15 14:13

是ACM题对吧???

u012216727
u012216727   Ds   Rxr 2015.07.12 18:58

你用了for还用while我认为是多余的。
当你m=11时,1时会加一次,10会加一次,11会加一次正好3次啊。
你想表达什么呢

tongyi55555
tongyi55555   2015.07.12 22:49

正确的结果是4,即1、10、11三个数字中包含了1,共4个。
你这个程序的主要问题是while循环中每次缩小十倍后的结果不是整数,即

 i/=10;

这句话有问题,在下面增加一行处理即可,修改为:

function deal(m) {
        var n = 0, h = 0, i=0;
        for (; n < m + 1; n++) {
            i = n;
            while (i > 0) {
                if ((i % 10) == 1) {
                    h++;
                }
                i /= 10;
                i = Math.floor(i);
            }
        }
        alert(h);
    }
Csdn user default icon
上传中...
上传图片
插入图片