Дали тестовое задание на собеседовании только что
Нужно сложить два больших числа которые не вмешяются в примитивные типы данных и не использоваться BigInteger b BegDecimial
Нужно в стороковом виде их сложить, подскажите алгоритм срочно, задание не на прогера, а пониже но это первый шаг
Hasan
26 уровень
Тестовое задание, помогите пожалуйста 20 минут осталось)
Обсуждается
Комментарии (21)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Wladyslaw Java Developer Master
22 октября 2020, 14:58
А, уже не вовремя походу.
Ну так как успехи там?
0
Hasan
27 января 2021, 11:25
Получилось. Месяц стажировался. Потом квалл - комиссия. Сейчас уже работаю. Есть много проектов, начал изучать Python, он здесь в цене. Написал парсер для работы, во время стажировки. Сейчас месяц на смене. Но, мотивации как раньше уже нет. Возможно из - за, того, что на удаленке. Пока в прострации. На работе есть зал, хожу туда регулярно.
0
Wladyslaw Java Developer Master
22 октября 2020, 14:41
Можно так попробовать. Только зарефакторить и причесать придется самому ибо это сейчас было писано на телефоне и это та ещё боль
0
Owpk
22 октября 2020, 13:50
Брутфорс, но зато работает
0
Ksenia VolkovaJava Developer в DXCMaster
22 октября 2020, 12:25
Например, идти по символу с конца и складывать, как в школе в столбик. И так же сохранять результат в строку, от конца к началу.
0
Hasan
22 октября 2020, 12:29
Так и нужно сделать, только не могу написать алгоритм
0
Hasan
22 октября 2020, 12:29
Вот это вышло
for (int i = chars.length; i > 0; i--) {
first += ((int)chars[i]+ (int)chars2[i]);
sb.append(first);
}
0
Hasan
22 октября 2020, 12:32
Ксения, помогите написать алгоритм пожалуйста буду очень благодарен, у меня паническая атака сейчас
0
Ksenia VolkovaJava Developer в DXCMaster
22 октября 2020, 12:37
Начинать нужно с сhars.length - 1 и до >=0
Еще нужно учесть, что строки могут быть разной длины.
Например, можно двигаться в цикле по той, что короче,а когда она закончится, просто дописать остальные символы из второй строки.
0
Hasan
22 октября 2020, 12:40
Осталось 10 минут, уфф
не могу понять как правильно поставить что бы сложение происходило у меня ошибка вылет за пределы массива
public static void main(String[] args) {
String firstNum = "12343314134431";
String secondNum = "24314134134";
StringBuilder sb = new StringBuilder();
char[] chars = firstNum.toCharArray();
char[] chars2 = secondNum.toCharArray();
int first= 0;
for (int i = chars.length-1; i >= 0; i--) {
first += ((int)chars2[i]+ (int)chars[i]);
sb.append(0, first);
}
}
}
0
Ksenia VolkovaJava Developer в DXCMaster
22 октября 2020, 12:41
Еще если сумма больше 10 - записываешь в строку только единицы (сумма%10), а 1 добавляешь к следующему разряду.
0
Hasan
22 октября 2020, 12:46
Подскажите как в массиве это написать у меня он выходит за массив я не могу понять, как сложение произвести
0
Ksenia VolkovaJava Developer в DXCMaster
22 октября 2020, 12:50
Выходит, потому что строки могут быть разной длины. См. коментарий выше.
0
Hasan
22 октября 2020, 12:54
Помогите пожалуйста.
0
Hasan
22 октября 2020, 12:58
for (int i = chars.length-1; i >= 0; i--) {
first +=(int)chars2[i]+ (int)chars[i];
if(first > 10){
sb.append(first%10);
chars[i]++;
}else
sb.append(first);
}
0
Hasan
22 октября 2020, 13:06
public static void main(String[] args) {
String firstNum = "12343314134431";
String secondNum = "24314134134";
StringBuilder sb = new StringBuilder();
char[] chars = firstNum.toCharArray();
char[] chars2 = secondNum.toCharArray();
int first = 0;
int total = 0;
int x = (int) Math.pow(2, 1000);
System.out.println("2^1000 = " + x);
String power = Integer.toString(Integer.parseInt(secondNum));
ArrayList<Integer> powstoint = new ArrayList<Integer>();
//From string to char
char[] stringtochar = power.toCharArray();
for (int b = 0; b < stringtochar.length; b++) {
powstoint.add(b, power.indexOf(Integer.parseInt(power)));
total = total + powstoint.get(b);
}
System.out.println(total);
char[] stringtochar = firstNum.toCharArray();
for (int b = 0; b < stringtochar.length; b++) {
powstoint.add(b, Character.getNumericValue(stringtochar[b]));
total = total + powstoint.get(b);
}
}
0
Ksenia VolkovaJava Developer в DXCMaster
22 октября 2020, 13:08
0
Булат РахимовExpert
22 октября 2020, 13:20
9999 + 99
0
Ksenia VolkovaJava Developer в DXCMaster
22 октября 2020, 13:24
Да, точно
Я на коленке писала, не тестировала.
0
Ksenia VolkovaJava Developer в DXCMaster
22 октября 2020, 13:46
0
Hasan
22 октября 2020, 14:46
Большое спасибо, за помощь. Я признался что, написал не сам, рассказал что в коде написано что не понял. В общем зачтено. Завтра будет квалл комиссия по теорисетей и информационной безопастности. Еще раз спасибо, что не проигнорировали и ответили.
0