javascript - C# 和 Javascript 代码的计算有什么区别

标签 javascript c#

我正在寻找欧拉项目问题的答案,我在这里找到了答案

http://www.mathblog.dk/triangle-number-with-more-than-500-divisors/

int number = 0;
int i = 1;

while(NumberOfDivisors(number) < 500){
    number += i;
    i++;
}

private int NumberOfDivisors(int number) {
    int nod = 0;
    int sqrt = (int) Math.Sqrt(number);

    for(int i = 1; i<= sqrt; i++){
        if(number % i == 0){
            nod += 2;
        }
    }
    //Correction if the number is a perfect square
    if (sqrt * sqrt == number) {
        nod--;
    }

    return nod;
}

所以我尝试在 Javascript 中实现相同的解决方案,但它没有给我相同的结果。

var number = 0;
var i = 1;

while (numberOfDivisors(number) < 500) {
  number += i;
  i++;
}

console.log(number);

function numberOfDivisors(num) {
  var nod = 0;
  var sqr = Math.sqrt(num);

  for (i = 1; i <= sqr; i++) {
    if (num % i === 0) {
      nod += 2;
    }
  }

 if (sqr * sqr == num) {
    nod--;
}

  return nod;
}

我用 C# 测试了其他代码,它给出了正确的解决方案。我想知道我是否犯了一个错误,或者它们在我不知道的某些方面是否有不同的工作方式。

最佳答案

问题是您正在测试非三 Angular 形数字,因为您忘记了一件重要的事情...范围...

for (i = 1; i <= sqr; i++) {

搞砸你的i(全局)值...

在 C# 中看到你有

for(int i = 1; i<= sqrt; i++){
    ^^^

给javascript同样的礼貌并尝试

for (var i = 1; i <= sqr; i++) {
     ^^^

你还应该得到整数的平方根,否则你在大多数计数中都会是一次

var sqr = Math.floor(Math.sqrt(num));

var number = 0;
var i = 1;
console.time('took');
while (numberOfDivisors(number) < 500) {
  number += i;
  i++;
}
console.timeEnd('took');
console.log(number);

function numberOfDivisors(num) {
  var nod = 0;
  var sqr = Math.floor(Math.sqrt(num));

  for (var i = 1; i <= sqr; i++) {
    if (num % i === 0) {
      nod += 2;
    }
  }

  if (sqr * sqr == num) {
    nod--;
  }

  return nod;
}

(添加了一些计时信息以供娱乐)

关于javascript - C# 和 Javascript 代码的计算有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46678340/

相关文章:

c# - WPF DoubleUpDown 命令绑定(bind)到上下按钮

c# - 在 iTextSharp 中操作行和单元格的宽度和高度

javascript - react-native flatlist 检测何时加载和呈现提要

javascript - 如何在 webgl 中正确设置透明度

javascript - 如何获取滚动条以在div内查看

javascript - 编写javascript库时避免class和id冲突

C#:如何使用数组、字符和字符串?需要清理的

javascript - Jquery Ui 模式打开双击行

C# 潜在的面试问题......太难了?

c# - dotTrace:谁在调用我的方法?