В настоящее время я пытаюсь запустить project euler(11) и столкнулся с проблемой при тестировании.Неисправные петли? или массив?
В настоящее время я использую числа от 1 до 400 вместо текстового документа. Тем не менее, когда я запускаю программу, результат не 400 * 399 ... * 396, это немного возмутительно низкое число. Я считаю, что у меня возникла проблема с крышкой на int
. Однако, когда я переключился на long
, как вы его видите, он по-прежнему сообщает о отрицательных числах. Очевидно, результаты выходят за пределы.
Любая помощь приветствуется, спасибо.
public class Euler11
{
public static void main(String[] args)
{
int[][] nums = new int[20][20];
int v = 0;
int h = 0;
long high = 0;
for(int i = 1; i <= 400; i++)
{
nums[h][v] = i;// replace i with reader
if(h == 19)
{
h = 0;
v++ ;
}
else
{
h++ ;
}
}
for(int y = 0; y <= 15; y++)
{
for(int x = 0; x <= 19; x++)
{
high = higher(high, nums[y][x], nums[y + 1][x], nums[y + 2][x],
nums[y + 3][x], nums[y + 4][x]);
}
}
System.out.print(high);
}
public static long higher(long high, int n1, int n2, int n3, int n4, int n5)
{
System.out.println(n1 + " " + n2 + " " + n3 + " " + n4 + " " + n5
+ " = " + (n1 * n2 * n3 * n4 * n5));
if(n1 * n2 * n3 * n4 * n5 > high)
{
//System.out.println(n1 + " " + n2 + " " + n3 + " " + n4 + " " + n5
//+ " = " + (n1 * n2 * n3 * n4 * n5));
return (n1 * n2 * n3 * n4 * n5);
}
else
{
return high;
}
}
}
Благодарим за консультацию. Теперь программа работает. Я только что сделал все long
, а затем бросил на int
при необходимости.
Слишком много кода ... –
Можете ли вы просто обрезать часть своего кода, которая вызывает проблему? –