【发布时间】:2016-07-19 09:29:37
【问题描述】:
我正在解决 Project Euler 的第 10 题,三角形数的序列是通过添加自然数生成的。所以第7个三角形数是1 + 2 + 3 + 4 + 5 + 6 + 7 = 28,要找到第一个三角形数的值有超过五百个除数?
我写了以下程序:
public class ProjectEulerProb12HighestDivisorTriangNumb {
public static void main(String[] args) {
int minLim = 7; //As seven is already given in prob statement
System.out.println(
"The first triangular no to have more than 500 divisors is " + getNaturalnumb(minLim));
}
public static int getNaturalnumb(int natNum) {
int div = 1, TrianNum = 1;
while (div <= 500) {
natNum++;
TrianNum = getTrianNum(natNum);
div = getDivCount(TrianNum);
}
return TrianNum;
}
public static int getTrianNum(int n) { //Generating Triangular Number for any Natural no. n
int TrianNum = 0;
for (int i = 1; i <= n; i++) {
TrianNum += i;
}
System.out.println(" The current TrianNum is " + TrianNum);
return TrianNum;
}
public static int getDivCount(int n) {// Getting Divisor count for any Triangular no. n
int DivCount = 1, nextnum = 1;
while (n != nextnum || DivCount != 500) {
if (n % nextnum == 0) {
System.out.println(
" The current n is "
+ n
+ " Current nextnum is "
+ nextnum
+ " current Divcount is "
+ DivCount);
DivCount++;
}
nextnum++;
}
return DivCount;
}
}
我得到以下运行时异常:
Exception in thread "main" java.lang.ArithmeticException: / by zero
at ProjectEulerProb12HighestDivisorTriangNumb.getDivCount(ProjectEulerProb12HighestDivisorTriangNumb.java:47)
at ProjectEulerProb12HighestDivisorTriangNumb.getNaturalnumb(ProjectEulerProb12HighestDivisorTriangNumb.java:20)
at ProjectEulerProb12HighestDivisorTriangNumb.main(ProjectEulerProb12HighestDivisorTriangNumb.java:8)
为了查看我错在哪里,我在方法 getDivCount 中输入了 print 语句并得到以下输出:
The current TrianNum is 36
The current n is 36 Current nextnum is 1 current Divcount is 1
The current n is 36 Current nextnum is 2 current Divcount is 2
The current n is 36 Current nextnum is 3 current Divcount is 3
The current n is 36 Current nextnum is 4 current Divcount is 4
The current n is 36 Current nextnum is 6 current Divcount is 5
The current n is 36 Current nextnum is 9 current Divcount is 6
The current n is 36 Current nextnum is 12 current Divcount is 7
The current n is 36 Current nextnum is 18 current Divcount is 8
The current n is 36 Current nextnum is 36 current Divcount is 9
The current n is 36 Current nextnum is -36 current Divcount is 10
The current n is 36 Current nextnum is -18 current Divcount is 11
The current n is 36 Current nextnum is -12 current Divcount is 12
The current n is 36 Current nextnum is -9 current Divcount is 13
The current n is 36 Current nextnum is -6 current Divcount is 14
The current n is 36 Current nextnum is -4 current Divcount is 15
The current n is 36 Current nextnum is -3 current Divcount is 16
The current n is 36 Current nextnum is -2 current Divcount is 17
The current n is 36 Current nextnum is -1 current Divcount is 18
Exception in thread "main" java.lang.ArithmeticException: / by zero
为什么 int 值在满足条件 (n!=nextnum) 后会增加到负数?救命!
【问题讨论】:
-
也许你想要
while (n!=nextnum && DivCount!=500) -
更正为运行时异常...
-
No Eran,一个数可以有少于 500 个除数,但 nextnum 仍然可以是 =n。另外,因为我需要获得第一个数字才能有 500 个除数,所以 OR 条件。
-
@VMi 那么你不能指望在 n==nextnum 的时候跳出循环。
-
True || False = True所以你不能跳出循环,直到两个条件都为假
标签: java