JavaScript写第十届蓝桥杯JavaC组省赛真题

js写蓝桥杯的Java题

第一题:求和

小明对数位中含有 2、0、1、9 的数字很感兴趣,在 1 到 40 中这样的数包 括 1、2、9、10 至 32、39 和 40,共 28 个,他们的和是 574。 请问,在 1 到 2019 中,所有这样的数的和是多少?

如果是在Java中我感觉应该更简单一些,因为JavaScript很多方法是没有的,另外我是先看的题,自己写完之后才看的答案,所以感觉我写的代码很复杂。

我的思路是:首先来一个大循环,循环出1~2019个数,大循环内求一下当前数的位数,如果是一个多位数,就从个位开始判断是否符合题中条件,如果符合,则将该数的循环给破坏掉,否则继续循环下去。

var count = 0;

for (var i = 1; i <= 2019; i++) {
    var figure = getFigure(i);
    var temp = parseInt(i);
    for (var k = 1; k <= figure; k++) {
        temp_1 = temp % 10;
        if (temp_1 == 2 || temp_1 == 0 || temp_1 == 1 || temp_1 == 9) {
            this.count += i;
            k = figure+1;
        }
        if(temp_1!=0){
            temp /= 10;
            temp = parseInt(temp)            
        }
    }
}
document.write(count)

// 获取位数的方法
// blog.tobewh.com
// 森林火博客
function getFigure(number) {
    var value = 1;
    while (number >= 10) {
        number /= 10;
        value++;
    }
    return value;
}

在看到人家写的代码之后我发现我写了很多没有必要的代码,明明一个for循环嵌套一个while循环就可以搞定的,非要再写一个获取数位的方法,参考别人的代码,我又重写了一下,代码一下子精简了许多:

var count = 0;
for (var i = 1; i <= 2019; i++) {
    var temp = i;        
    while (temp != 0) {
        var single = temp % 10;
        if (single == 2 || single == 0 || single == 1 || single == 9) {
            this.count += i;
            break;
        }
        temp /= 10;
        temp = parseInt(temp);
    }
}
document.write(count);

因为JavaScript中没有单独的int型的数据类型,所以多了一个转换int的步骤:temp = parseInt(temp);

本文链接:

http://www.tobewh.com/index.php/archives/8/