Данную операцию можно решить лобовым перемножением исходного числа, а можно воспользоваться быстрым возведением в степень:
- BigInt pow(const BigInt &a, const int &N)
- {
- BigInt res(1),cur = a;
- int n = N;
- while (n)
- {
- if (n&1)
- res = res * cur;
- cur = cur * cur;
- n>>=1;
- }
- return res;
- }
* This source code was highlighted with Source Code Highlighter.
Стоит обратить внимание на то, что количество разрядов у результирующего числа очень быстро растет, поэтому нужно грамотно подбирать размерность массива digits в структуре BigInt.
что значит res(1)??
ОтветитьУдалитьэто конструктор с параметром: http://www.firststeps.ru/dotnet/oopnet/r.php?18
ОтветитьУдалитьдругими словами в переменную res кладем цифру 1
тоесть res.digits[0]=1??
ОтветитьУдалитьПочти так. Во-первых, нужно обнулить содержимое массива digits. Во-вторых, нужно определить длину числа. В нашем случае передается цифра, значит длина числа будет 1. И вот уже в-третьих, то что вы написали.
ОтветитьУдалить