Условие:
Наибольшее произведение четырех последовательных цифр в нижеприведенном 1000-значном числе равно 9 × 9 × 8 × 9 = 5832.
73167176531330624919225119674426574742355349194934 96983520312774506326239578318016984801869478851843 85861560789112949495459501737958331952853208805511 12540698747158523863050715693290963295227443043557 66896648950445244523161731856403098711121722383113 62229893423380308135336276614282806444486645238749 30358907296290491560440772390713810515859307960866 70172427121883998797908792274921901699720888093776 65727333001053367881220235421809751254540594752243 52584907711670556013604839586446706324415722155397 53697817977846174064955149290862569321978468622482 83972241375657056057490261407972968652414535100474 82166370484403199890008895243450658541227588666881 16427171479924442928230863465674813919123162824586 17866458359124566529476545682848912883142607690042 24219022671055626321111109370544217506941658960408 07198403850962455444362981230987879927244284909188 84580156166097919133875499200524063689912560717606 05886116467109405077541002256983155200055935729725 71636269561882670428252483600823257530420752963450
Найдите наибольшее произведение тринадцати последовательных цифр в данном числе.
Повторюсь, если взять 4 числа, как в примере, то ответ сходится, но если взять 13 чисел, то выдает ответ: 2091059712, а верный: 23514624000; Прошу помощи( Вот мой код:
public class Main {
public static void main(String[] args) {
String fckstr = "73167176531330624919225119674426574742355349194934\r\n" +
"96983520312774506326239578318016984801869478851843\r\n" +
"85861560789112949495459501737958331952853208805511\r\n" +
"12540698747158523863050715693290963295227443043557\r\n" +
"66896648950445244523161731856403098711121722383113\r\n" +
"62229893423380308135336276614282806444486645238749\r\n" +
"30358907296290491560440772390713810515859307960866\r\n" +
"70172427121883998797908792274921901699720888093776\r\n" +
"65727333001053367881220235421809751254540594752243\r\n" +
"52584907711670556013604839586446706324415722155397\r\n" +
"53697817977846174064955149290862569321978468622482\r\n" +
"83972241375657056057490261407972968652414535100474\r\n" +
"82166370484403199890008895243450658541227588666881\r\n" +
"16427171479924442928230863465674813919123162824586\r\n" +
"17866458359124566529476545682848912883142607690042\r\n" +
"24219022671055626321111109370544217506941658960408\r\n" +
"07198403850962455444362981230987879927244284909188\r\n" +
"84580156166097919133875499200524063689912560717606\r\n" +
"05886116467109405077541002256983155200055935729725\r\n" +
"71636269561882670428252483600823257530420752963450";
char[] mas = fckstr.toCharArray(); // массив из строки
int[] mas2 = new int[fckstr.length()];args // создание массива для чисел
int c, d = 0;
for(int j = 0; j < fckstr.length(); j++) {
mas2[j] = Character.getNumericValue(mas[j]); // перевод чисел из char в int
}
for(int i = 0; i < fckstr.length() - 12; i++) { // для 13 последовательных чисел
c = mas2[i] * mas2[i + 1] * mas2[i + 2] * mas2[i + 3] * mas2[i + 4]
* mas2[i + 5] * mas2[i + 6] * mas2[i + 7] * mas2[i + 8]
* mas2[i + 9] * mas2[i + 10] * mas2[i + 11] * mas2[i + 12];
d = calc(c,d); // нахождение самого большого значения
}
System.out.println(d);
}
public static int calc(int a, int b) { //определяет большее значение
int max;
if(b > a) max = b;
else max = a;
return max;
}
}
Если хотите проверить первый пример, то вам надо в цикле для последовательных чисел изменить - 12 на -3; а количество перемножаемых ячеек массива сократить до c = mas2[i] * mas2[i + 1] * mas2[i + 2] * mas2[i + 3]
public class Main {
public static void main(String[] args) {
String fckstr = "73167176531330624919225119674426574742355349194934"
+ "96983520312774506326239578318016984801869478851843"
+ "85861560789112949495459501737958331952853208805511"
+ "12540698747158523863050715693290963295227443043557"
+ "66896648950445244523161731856403098711121722383113"
+ "62229893423380308135336276614282806444486645238749"
+ "30358907296290491560440772390713810515859307960866"
+ "70172427121883998797908792274921901699720888093776"
+ "65727333001053367881220235421809751254540594752243"
+ "52584907711670556013604839586446706324415722155397"
+ "53697817977846174064955149290862569321978468622482"
+ "83972241375657056057490261407972968652414535100474"
+ "82166370484403199890008895243450658541227588666881"
+ "16427171479924442928230863465674813919123162824586"
+ "17866458359124566529476545682848912883142607690042"
+ "24219022671055626321111109370544217506941658960408"
+ "07198403850962455444362981230987879927244284909188"
+ "84580156166097919133875499200524063689912560717606"
+ "05886116467109405077541002256983155200055935729725"
+ "71636269561882670428252483600823257530420752963450";
System.out.println(calculate(fckstr, 13));
}
public static long calculate(String fckstr, int numb) {
long result = 0, tmp = 1;
for (int k = 0; k < numb; k++) {
for (int i = k; i < fckstr.length(); i++) {
result=Math.max(tmp*=Character.getNumericValue(fckstr.charAt(i)), result);
if ((i-k)%numb==0) tmp=1;
}
}
return result;
}
}
Ваша проблема в символе \r\n, когда вы распознаете символ, то получаете здесь отрицательное значение - это -1, отсюда некорректный результат
Я решил сделать по своему и вот верное решение:
Что я сделал:
1 - Убрал /r/n
, т.к. это нам не нужно .
2 - В отдельном методе calculate
я принимаю число в виде строки и сколько последовательных чисел будет перемножаться .
3 - For-loop
начинается от 0 и кончается длиной числа минус сколько чисел в ряд мы перемножаем
4 - Создаем второй for-loop
, в котором перемножаем N
последовательных чисел:
tempResult *= Character.getNumericValue(line.charAt(j));
.
5 - сравниваем tempResult
с result
и в конце выводим result
, что будет являться наибольшим произведением N
чисел
public class stackover {
public static void main(String[] args) {
String fckstr = "73167176531330624919225119674426574742355349194934" +
"96983520312774506326239578318016984801869478851843" +
"85861560789112949495459501737958331952853208805511" +
"12540698747158523863050715693290963295227443043557" +
"66896648950445244523161731856403098711121722383113" +
"62229893423380308135336276614282806444486645238749" +
"30358907296290491560440772390713810515859307960866" +
"70172427121883998797908792274921901699720888093776" +
"65727333001053367881220235421809751254540594752243" +
"52584907711670556013604839586446706324415722155397" +
"53697817977846174064955149290862569321978468622482" +
"83972241375657056057490261407972968652414535100474" +
"82166370484403199890008895243450658541227588666881" +
"16427171479924442928230863465674813919123162824586" +
"17866458359124566529476545682848912883142607690042" +
"24219022671055626321111109370544217506941658960408" +
"07198403850962455444362981230987879927244284909188" +
"84580156166097919133875499200524063689912560717606" +
"05886116467109405077541002256983155200055935729725" +
"71636269561882670428252483600823257530420752963450";
calculate(fckstr, 4);
calculate(fckstr, 13);
}
private static void calculate(String line, int number){
long result = 0;
long tempResult;
for (int i = 0; i <= line.length() - number; i++) {
tempResult = 1;
for(int j = i; j < i + number; j++){
tempResult *= Character.getNumericValue(line.charAt(j));
}
if(tempResult >= result){
result = tempResult;
}
}
System.out.println("Result = " + result);
}
}
Ваша ошибка в первоначальном варианте была была связана с неправильным типом данных для вычисления "c". int.MaxValue=2147483647 < 23514624000, которое Вы хотели получить. Если бы Вы использовали не int, а ulong или long, как в последнем варианте, то и первоначальный вариант "сработал" бы (наверное :) ).
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Почему при попытки получить методы из интерфейса, пишет Cannot resolve method 'isProduct()' и Cannot resolve method 'getMenuTitle()'ourMenuItemsя прописываю как ArrayList
в проекте (spring boot + embedded tomcat) я использую jar файл в котором есть класс
Создаю уведомление для приложения, вроде нормально работало, и резко не понимаю из-за чего(вроде ничего такого не делал) перестало вообще...
Столкнулся с проблемкой хочу убрать 1 окно на задний план, но почему-то убираются все с JFrame такой проблемы нет