我正在用JavaScript编写一个程序来计算6位数的数字,其前3位数的总和等于最后3位数的总和。所以我为这个问题写了两个不同的解决方案,尽管只有一个会回答正确的答案
我还编写了一个函数sumOfDigits()
,它只是计算传递给它的数字的总和。此功能不在这里写,但它的工作正确。
function count1() {
total=0;
for (i = 100000; i <= 999999; i+=1) {
part = i % 1000;
if ((sumOfDigits(i-part)) == ((sumOfDigits(part)))) {
total+=1;
}
} return total;
}
function count2() {
array = [];
for (i = 100000; i <= 999999; i+=1) {
part = i % 1000;
if ((sumOfDigits(i-part)) == ((sumOfDigits(part)))) {
array.push(i);
}
} return array;
}
count1()
函数无法正常工作并返回28作为答案,而返回数组的count2()
函数返回长度为50412的数组,这是正确的答案。有人可以告诉我为什么第一个功能无法正常工作。
正在运行的count1
功能的屏幕截图。
答案 0 :(得分:5)
您是否在total
的实施中使用sumOfDigits()
?我猜这两个函数都使用相同的全局total
。
首次使用时,您应该为所有局部变量添加前缀var
,这样它们就不会被视为全局变量,例如:
var total = 0;
编辑:我刚刚确认了这一点。如果sumOfDigits()
使用全局total
,count1()
将返回28。
答案 1 :(得分:1)
可能total
是一个全局变量,对您的解决方案有一些价值。尝试为return返回另一个变量:
function count1() {
var count = 0;
for (i = 100000; i <= 999999; i+=1) {
part = i % 1000;
if ((sumOfDigits(i-part)) == ((sumOfDigits(part)))) {
count+=1;
}
} return count;
}
答案 2 :(得分:0)
我认为您可以重新考虑您的代码。这是一种更简单,更快速的方法(在nodejs中<500ms,更快,因为它是所有数字,即没有转换):
//helper: sum of digits in number [n]
function sumOfDigits(n){
if (!(n^0) || n<10) {return n;}
var sum = 0;
while (n>=10) {
sum += n%10;
n = (n/10)^0;
}
return sum+n;
}
function sumDigitsComparer(num){
return sumOfDigits((num/1000)^0) === sumOfDigits(num%1000);
}
var x = 1000000, n = 0;
while ((x-=1,x>=100000)) { sumDigitsComparer(x) && (n+=1); }
//=> n = 50412