Re: Вопрос на собеседовании
От: THESERG  
Дата: 20.08.11 11:07
Оценка:
вот такое первое в голову приходит:

string Mult (const string &X, const string &Y)
{
  // реализуем алгоритм умножения в столбик
}

string Power( int X, short Y)
{
  // отдельно обрабатываем случаи X <=0 или Y <= 0

  // string x = lexical_cast X - ну вы поняли
  string xOrig (x);

  // возводим x в квадрат, пока суммарная степень x не больше Y
  while ( 2 * PowCount < Y )
  {
    PowCount *= 2;
    x = Mult (x, x);
  }
  
  // добиваем оставшееся
  for ( int i = PowCount; i < Y; i++ )
    x = Mult (x, xOrig);
}


Здравствуйте, shrecher, Вы писали:

S>Как такой вопрос на собеседовании, был задан на позиции C++ разработчика?


S>Написать код на доске для функции:


S>

S>string Power( int X, short Y) // вернуть строчное представление результата X в степени Y 
S>{



S>}

S>
Re[2]: Вопрос на собеседовании
От: shrecher  
Дата: 20.08.11 11:23
Оценка:
Здравствуйте, THESERG, Вы писали:

THE>вот такое первое в голову приходит:


THE>
THE>string Mult (const string &X, const string &Y)
THE>{
THE>  // реализуем алгоритм умножения в столбик
THE>}

THE>


Как я понял, вот этот метод и есть цель вопроса . Но, при этом скорость реализации очевидно важна. Поэтому просто в "столбик" явно не катит. Грубо говоря, требуемый метод такой:

Все большое число записывается ввиде массива целых предстваленных в FFFFFFF-ичной системе.
когда умножаем x на y, где x y int, записываем результат в int64. Если результат меньше размерности int, то его и использем, а если больше, то делим его на 2 int-a. Все это дописываем в наш массив. Когда все перемножили преобразуем массив в строку.

Вся эта муть выглядит как странно для собеседования.
Re[3]: Вопрос на собеседовании
От: THESERG  
Дата: 20.08.11 11:36
Оценка:
я бы не парился и перемножал десятичные цифры, тогда можно за минут 40 изобразить ужасного качества код
(на листочке бумаги, я так понимаю?)

нужны отдельные функции (если времени не хватит, можно их не писать, оставить только объявления типа...):
string Sum (const string &V1, const string &V2); // сложение
void Shift (string &V, signed int N); // сдвиг влево/вправо на N позиций
string Mult (const string &V, char D); // умножение числа V на число D (0<=D<=9)


всё это нарисовать и спросить, реализацию чего Вы бы хотели, чтоб я написал
Re[4]: Вопрос на собеседовании
От: shrecher  
Дата: 20.08.11 11:54
Оценка:
Здравствуйте, THESERG, Вы писали:

THE>всё это нарисовать и спросить, реализацию чего Вы бы хотели, чтоб я написал


Я-то не хочу Я как раз удивлен странностью вопроса. Конечно, интервьюер может спрашивать все что они хочет, но все-таки ... Это достаточно редкая область программирования, она уже существует в готовых библиотеках и это не профильная задача на набираемую позицию. Видать уже ответы на вопрос про виртуальный деструктор народ выучил, лавки пошли осваивать новые ниши.
Re[5]: Вопрос на собеседовании
От: THESERG  
Дата: 20.08.11 13:02
Оценка:
я говорю, изобразить на листочке эти вспомогательные функции, и дать их интервьюверу

если он одобрит план, то можно и не успеть с реализацией — всё равно решение как-бы есть

т.о. проверяется не столько программирование, сколько способность решать нетривиальные задачи
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.