Euler17 Javascript

Euler17 Javascript,javascript,Javascript,这是针对17号Euler项目的问题,我正在用javascript进行尝试。对我来说最奇怪的是,如果我在我的答案上调用typeof(),它会说这是一个“数字”。然后,如果我尝试运行打印结果的函数,我会得到“NaN” 如果您知道1)修复我的代码以使其正常工作的方法和/或2)如果存在此问题(我不怀疑它确实存在),则非常感谢您提出建设性的批评 var arrayOnes = [3,3,5,4,4,3,5,5,4]; var arrayTeens = [6,6,8,8,7,7,9,8,8]; var ar

这是针对17号Euler项目的问题,我正在用javascript进行尝试。对我来说最奇怪的是,如果我在我的答案上调用typeof(),它会说这是一个“数字”。然后,如果我尝试运行打印结果的函数,我会得到“NaN”

如果您知道1)修复我的代码以使其正常工作的方法和/或2)如果存在此问题(我不怀疑它确实存在),则非常感谢您提出建设性的批评

var arrayOnes = [3,3,5,4,4,3,5,5,4];
var arrayTeens = [6,6,8,8,7,7,9,8,8];
var arrayTens = [3,6,6,5,5,5,7,6,6];
var arrayHundreds = [12,12,14,13,13,12,14,14,13];
var sum99 = 0;
var sum999 = 0;
var sum1000 = 11;

function sumsOneToNineNine() {
    for (i=1; i<=9; i++) {
        sum99 += ((arrayOnes[i]*9) + arrayTeens[i] + arrayTens[i]);
    }
}

function sumsOneToOneThousand() {
    sumsOneToNineNine();
    for (i=1; i<9; i++) {
    sum999 += arrayHundreds[i];
    }
    sum999 += 9*sum99 + sum999;
    sum1000 += sum999;
    console.log(sum1000);
}

sumsOneToOneThousand();
var数组=[3,3,5,4,4,3,5,5,4];
var arrayTeens=[6,6,8,8,7,7,9,8,8];
var arrayTens=[3,6,6,5,5,7,6,6];
var arrayHundreds=[12,12,14,13,13,12,14,14,13];
var-sum99=0;
var-sum999=0;
var-sum1000=11;
功能sumsOneToNineNine(){

对于(i=1;i即使你说你认为你可以得到它,我想我会发布一个比你提出的更干净的解决方案,它也可以很容易地扩展到1000以上,即使问题不需要它

无论如何,青少年也有一个模式,其中5个与数字的名称+10的长度相同,这是因为一个字母掉了,另外4个,因为一个字母没有掉下来,长了1个字母

一旦您超过100到9999(是的,我知道问题不需要它,但如果您想将其扩展到persay,10K),您可以重新使用一位数组,然后在进入10K-100K范围时,重用青少年规则和十位数组,等等

var lenHundred = 7;
var lenThousand = 8;
var lenPlaceOnes = [0,3,3,5,4,4,3,5,5,4];
var lenPlaceTens = [0,3,6,6,5,5,5,7,6,6];

function sumTo(num) {
    var sum = 0;

    for (var i = 1; i <= num; i++) {
        var placeOnes = i % 10;
        var placeTens = Math.floor(i / 10) % 10;
        var placeHundreds = Math.floor(i / 100) % 10;
        var placeThousands = Math.floor(i / 1000) % 10;

        // Add the ones place
        sum += lenPlaceOnes[placeOnes];

        // Add the tens place
        sum += lenPlaceTens[placeTens];

        // If the hundreds place is non-zero, add it and "hundred"
        if (placeHundreds != 0) {
            sum += lenHundred + lenPlaceOnes[placeHundreds];
        }

        // If the thousands place is non-zero, add it and "thousand"
        if (placeThousands != 0) {
            sum += lenThousand + lenPlaceOnes[placeThousands];
        }

        ////////////////
        // TEENS RULE //
        ////////////////

        // If the number is in the teens, take care of special numbers
        // Eleven is the same length as "oneten", Twelve the same as "twoten", and so on
        // With the exception of those in the switch statement
        if (placeTens == 1) {
            // If the ones place is 4, 6, 7, or 9, add an extra 1 for the "e"
            switch (placeOnes) {
                case 4:
                case 6:
                case 7:
                case 9:
                    sum += 1;
                    break;
            }
        }

        //////////////
        // AND RULE //
        //////////////

        // If the value is above one hundred, and the number is not an exact hundred, add
        // 3 for the "and"
        if (i > 100 && i % 100 != 0) {
            sum += 3;
        }
    }

    return sum;
}

console.log("Sum to Five Inclusive: " + sumTo(5));
console.log("Sum to 1K Inclusive: " + sumTo(1000));
var=7;
var=8;
变量lenPlaceOnes=[0,3,3,5,4,4,3,5,5,4];
变量lenPlaceTens=[0,3,6,6,5,5,7,6,6];
函数sumTo(num){
var总和=0;
对于(变量i=1;i 100&&i%100!=0){
总和+=3;
}
}
回报金额;
}
console.log(“总计五个,包括:+sumTo(5));
控制台日志(“总计1K,包括:+sumTo(1000));

根据规范和IEEE 754标准,
NaN
是一个数字值。
NaN
在每种语言中都是数字类型。为什么它“如此奇怪”在Javascript中?我刚刚意识到我的每件事都应该是I-1,而不是I,以说明从0开始的索引,而不是1。现在我得到了一个#答案,但这不是正确的答案。我还意识到我的数组数都短于1。仍然没有得到正确的答案。另外,我认为我应用的100还不够。谢谢,我我想我可以从这里得到:)