您的位置:首页 > 其它

Lintcode快速幂

2015-06-27 20:17 225 查看
计算an %
b,其中a,b和n都是32位的整数。

例如 231 % 3 = 2

例如 1001000 % 1000 = 0
这题要考虑输入的a,b是否为负数,结果是否溢出,是否超时,这里用到了分治递归
class Solution {
public:
/*
* @param a, b, n: 32bit integers
* @return: An integer
*/
int fastPower(int a, int b, int n) {
// write your code here
long long res = 0;
if (a == 0 || b==0)
return 0;
a = a%b;
if (a>0) {
res = power(a,b,n);
if (n <0) {
res = 1/res;
}
}
else {
res = power(a,b,n);
if (n%2 ==1) {
res = 0-res;
}
if (n < 0) {
res = 1/res;
}
}
return res%b;
}
long long power(int a,int b,int n) {
if (n == 0) {
return 1;
}
if (n ==1) {
return a;
}
long long result =  power(a,b,n>>1);
result = result*result %b;
if (n & 0x1 ==1) {
result =result *a%b;
}
return result;
}

};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: