java - 为什么我的程序不能按预期运行?

标签 java loops integer

我正在研究欧拉项目的第十二个问题。这都是关于三角形数的;我正在尝试找到第一个除数超过 500 的三角形数。我写了一个程序来找到这个,但是,它没有给我正确的答案,我不明白为什么。我在下面提供了我的代码:

public class problemTwelve {
  public static void main(String [] args) {
    int i = 1;
    int number = 1;
   while(getDivisors(number) < 500) {
     number += i;
     i++;
   }
   System.out.println("The first triangle number to have greater than 500 divisors is: " + number);
  }

  private static int getDivisors(int triangleNum) {
    int noOfDivisors = 0;
    int numToTest = (int) Math.sqrt(triangleNum);
    for(int i = 1; i <= numToTest; i++) {
      if((triangleNum % i) == 0) {
        noOfDivisors += 2;
      }
    }
    if((numToTest * numToTest) == triangleNum) {
      noOfDivisors--;
    }
    return noOfDivisors;
  }
}

程序运行时给出的输出如下:

The first triangle number to have greater than 500 divisors is: 146611080

在欧拉项目中输入这个数字作为答案后,我们可以发现它是错误的。我不知道我的程序哪里出了问题......

最佳答案

您检查的数字似乎不是三角形。看看代码,检查的第二个数字是 2,它不是三角形数字。

尝试移动线条

i++;
行前
number+=i;

关于java - 为什么我的程序不能按预期运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28925297/

相关文章:

java - 如何在Java中循环使用多线程

java - 从一个文件中获取整数列表

vb6 - Visual Basic 6 如何将整数转换为 boolean 值?

java - CSS 背景属性在使用 java 的 pdfHTML iText7 中不起作用

java - 如何创建实现接口(interface)的抽象类对象(JAVA)

ios - 意外的迭代性能下降

floating-point - 现代芯片上的 float 与整数运算性能

java - 使用 Java 8 的模板方法设计模式

java - 我希望 TextView 在一行中结束...如何做

python - 将值循环到列表中(更改值)