Euler17 Javascript
这是针对17号Euler项目的问题,我正在用javascript进行尝试。对我来说最奇怪的是,如果我在我的答案上调用typeof(),它会说这是一个“数字”。然后,如果我尝试运行打印结果的函数,我会得到“NaN” 如果您知道1)修复我的代码以使其正常工作的方法和/或2)如果存在此问题(我不怀疑它确实存在),则非常感谢您提出建设性的批评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
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还不够。谢谢,我我想我可以从这里得到:)