Sunday, January 1, 2017

372. Super Pow

Q:

Your task is to calculate ab mod 1337 where a is a positive integer and b is an extremely large positive integer given in the form of an array.
Example1:
a = 2
b = [3]

Result: 8
Example2:


a = 2
b = [1,0]

Result: 1024

A:

就是记录下每一位的模,然后逐步相乘即可

public class Solution {
    public int superPow(int a, int[] b) {
        if(b.length==0)
            return 1;
        int n = b.length;
        int [] C = new int[ n ]; // 10^i of a/1337
        Arrays.fill(C,1);
        C[n-1] = a % 1337;
        for(int i =n-2;i>=0;i--){
            // for each position , loop 10 times
            for(int j = 0;j<10;j++){
                C[i] = (C[i] * C[i+1]) % 1337;
            }
        }
        int res = 1;
        for(int i =0;i<n;i++){
            for(int j = 0;j<b[i];j++){
                res = (res*C[i] ) % 1337;
            }
        }
        return res;
    }
}
 



Errors :

因为b[0]是最高位,  因此C的最高位也应该是C[0]   ---- 自己一开始写习惯了,把C【0】写成最低位了




No comments:

Post a Comment