Минимальное допустимое основание системы счисления

  • 16
  • Недоступна
В метод main первым аргументом приходит строка, которая содержит последовательность символов (Все символы в строке имеют коды в таблице ASCII от 32 до 127 включительно). Длина строки не превышает 255 символов. Нужно реализовать программу, которая по входящей строке определит, является ли содержимое
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (51)
  • популярные
  • новые
  • старые
Для того, что бы оставить комментарий вы должны авторизоваться
вчера, 11:06
veryBigInteger!!!
Kovur31 уровень
16 января, 21:24
try-catch должно быть два. Один ловит попытки преобразования, а во второй завернут весь код целиком.
Макс31 уровень
28 декабря 2018, 19:23
решить норм задачу сбивает информация о (Все символы в строке имеют коды в таблице ASCII от 32 до 127 включительно). Длина строки не превышает 255 символов. for+BigInteger bigInteger = new BigInteger( args[0],i ); и вставляем два try catch
NodeOne36 уровень
20 октября 2018, 10:03
Не принимало когда обрабатывал и прописные буквы. Потом догадался привести строку к верхнему регистру и убрать обработку строчных букв - прошло. Никаких BigInteger ни юзал.
Kovur31 уровень
16 января, 21:33
Но это неправильно. Прописные тоже нужно обрабатывать, т.к. дается пример "12AS08z". Т.е. диапазон: 1-9, A-Z, a-z
NodeOne36 уровень
четверг, 13:01
Ну тогда просто игнорируйте мой пост. Как будто в вашей вселенной его нет.
Mark34 уровень, Санкт-Петербург
19 сентября 2018, 18:34
Как это Задачу приходится решать через распарсивание числа с помощью BigInteger. Хотя ежу понятно, что достаточно найти в числе самую большую цифру и прибавить единичку. В десятичной системе самая большая цифра 9, в шестнадцатеричной f (15) и т.д. но нет)
Василий35 уровень
8 августа 2018, 09:43
Длину строки не проверять - будет неочевидная ошибка по первому пункту (
Николаевич39 уровень
24 июля 2018, 13:44
не нужно проверять отдельно строку на "лишние" символы. если посмотреть таблицу ascii кодов, то увидите, что в заданном диапазоне как раз и находятся интересующие нас символы, все остальное просто не распарсится в число с любым основанием - будет исключение, которое и выведет "incorrect". у меня все просто по задумке: проверил на длину строку (чтоб не больше 255 символов и то не уверен, что это было обязательно), в цикле попробовал ее распарсить с основанием, которое и подбирал этим циклом, если получалось, то выводил значение основания и выходил из цикла, если нет - попадал в catch, где проверял равно ли i(количество итераций) 36, если да, то выводил "incorrect", нет - опять по циклу прошелся... один нюанс выяснился, что без заключения в try-catch всего кода, не принимало по первому пункту, хотя уверен, что можно было и без этого реализовать.
Сергей Мурин41 уровень
19 июля 2018, 02:22
Если возникло ЛЮБОЕ исключение... необходимо вывести "incorrect" -2 попытки :(
Сергей36 уровень, Москва
7 августа 2018, 20:33
ага, потом еще обернул весь код в try{ }catch(Exception e){ } не понятно для чего это, что там может кидануть что-то другое?
Павел41 уровень, Санкт-Петербург
23 августа 2018, 13:36
Например, ArrayIndexOutOfBoundsException, если args пустой.
14 июля 2018, 14:08
Long не принял, BigInteger принял
Дмитрий Скоморохов35 уровень, Москва
15 июля 2018, 17:52
Тоже самое.
Андрей40 уровень, Москва
29 июля 2018, 20:07
видимо опять что-то пофиксили, на момент 6 июля лонг принимался
Андрей40 уровень, Москва
6 июля 2018, 14:29
for (int i = 2; i <= 36;) {
    try {
        Long.parseLong(args[0], i);
        System.out.println(i);
        break;
    } catch (NumberFormatException e1) {
        i++;
    }
}
Проверку на "читабельность" строки можно сделать в цикле через прекрасные статические методы isLetter() и isDigit() и потом весь код обернуть в общий try-catch.
Андрей40 уровень, Москва
29 июля 2018, 20:06
решение через регулярки - это второй вариант решения этой задачи, я делал без регулярок