问题:求整数3的33次方的后三位。
难度:★★☆☆☆
分析:定义long类型也无法装下这么大的结果。考虑3在计算乘法时,结果的低位只对高位有进位的影响,所以我们可以舍去结果的前n位,因为记录他们是多余的。
算法:每一次循环使用上一次结果*3,然后截取后3位作为本轮结果,反复循环即可求解。
参考JAVA代码:
public class BigPower {
private int base;
private int power;
private int capturedigital = 1;
public BigPower(int base, int power, int digital){
this.base = base;
this.power = power;
for(int i = 0; i < digital; i++){
this.capturedigital *= 10;
}
System.out.print(this.getResult(power));
}
private int getResult(int power){
for(int i = 0; i < power; i++){
base *= base;
base = base - (base / capturedigital) *capturedigital;
}
return base;
}
}
base是底数,power为指数,digital为截取位数,capturedigital为每轮截取结果。