0 (ноль) Выход для определенных входных данных для двоичного экспонирования (C ++) - PullRequest
0 голосов
/ 04 мая 2020

Вот формулировка задачи: если задано число N, пусть обратное число будет R. Задача состоит в том, чтобы напечатать выходную мощность выражения (N, R), где степенная функция представляет N, возведенную в степень R. Примечание. Поскольку ответы могут быть очень большими, выведите результат по модулю 10 ^ 9 + 7.

Я исключаю код драйвера и включаю только приведенный ниже код функции: (Язык: C ++)

long long power(int n,int r)

{   const int m=1000000007;
   long long res=1;
   while(r>0)
   {
       if(r&1)
       res= res*n % m ;

       n= n*n % m ;
       r>>=1;
       }
   return res;
}

Проблема в том, что для некоторых случаев ввода выводится 0 (ноль), и я не могу понять, почему. Работает нормально для всех N = 1 до 11, но для 12 вывод равен 0. Работает нормально для 13, но снова возвращает 0 для 14.

I / P: 12 O / P: 0 // Неожиданно, ожидаемо 864354781

I / P: 13 O / P: 735546351 // Ожидаемый

I / P: 14 O / P: 0 // Неожиданный, ожидаемый 722400406

Можете ли вы пожалуйста, помогите мне понять, где я иду не так? Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...