解题思路:
该题采用了快速幂的方法,通过不断调用快速幂,从数组的后面(个位)开始,不断对中间值相乘,每遍历过一个位数,就要让a翻上10倍,这样就避免修改快速幂函数的麻烦,代码如下:
class Solution {
public:
const int MOD = 1337;
int quickPow(int a, int n) {
if(n == 0) {
return 1;
}
int b = quickPow(a, n / 2);
return n % 2 == 0 ? (long)b * b % MOD : (long)b * b * a % MOD;
}
int superPow(int a, vector<int>& b) {
int ans = 1;
for(int i = b.size() - 1; i >= 0; i --) {
ans = (long)ans * quickPow(a, b[i]) % MOD;
a = quickPow(a, 10);
}
return ans;
}
};