实现 pow(x, n) ,即计算
x
的n
次幂函数(即,x^n
)。
思路:
(1)当n=0时,返回值应该为1;
(2)当n<0时,返回的应当是1/mypow(x,-n);但是当n=-2^31时,-n = 2^31造成越界;
所以应该返回1 /(x* myPow(x, -(n+1)))
double myPow(double x, int n){ if (n < 0) return 1 /(x* myPow(x, -(n+1))); if (n == 0) return 1; double tmp = myPow(x*x, n >> 1); if (n % 2) tmp = tmp * x; return tmp; }
你的任务是计算
ab
对1337
取模,a
是一个正整数,b
是一个非常大的正整数且会以数组形式给出。
思路:
(1)先从b[bsize-1]来计算,当算完一位,a=a^10;(例:b=[2,1],当算完1时,a=a^10,最后再算2时ans=(a^10)^2);答案不变;
(3)注意int可能造成越界,灵活使用long;
int pow1(int a, int n) { int ans = 1; while (n > 0) { if (n % 2 == 1) { ans = (long)ans * a % 1337; } n /= 2; a = (long)a * a % 1337; } return ans; } int superPow(int a, int* b, int bSize){ int ans = 1; for (int i = bSize - 1; i >= 0; i--) { ans = (long)ans * pow1(a, b[i]) % 1337; a = pow1(a, 10)%1337; } return ans; }