вот такое первое в голову приходит:
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>
Здравствуйте, 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. Все это дописываем в наш массив. Когда все перемножили преобразуем массив в строку.
Вся эта муть выглядит как странно для собеседования.
я бы не парился и перемножал десятичные цифры, тогда можно за минут 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)
всё это нарисовать и спросить, реализацию чего Вы бы хотели, чтоб я написал
Здравствуйте, THESERG, Вы писали:
THE>всё это нарисовать и спросить, реализацию чего Вы бы хотели, чтоб я написал
Я-то не хочу
Я как раз удивлен странностью вопроса. Конечно, интервьюер может спрашивать все что они хочет, но все-таки ... Это достаточно редкая область программирования, она уже существует в готовых библиотеках и это не профильная задача на набираемую позицию. Видать уже ответы на вопрос про виртуальный деструктор народ выучил, лавки пошли осваивать новые ниши.
я говорю, изобразить на листочке эти вспомогательные функции, и дать их интервьюверу
если он одобрит план, то можно и не успеть с реализацией — всё равно решение как-бы есть
т.о. проверяется не столько программирование, сколько способность решать нетривиальные задачи