这篇文章讲述的是算法趣味整数部分的高次方的尾数问题的java实现,参考的书籍为清华大学出版社出版,贾蓓等编著的《c语言趣味编程1000例》,如有错误或者不当之处,还望各位大神批评指正。
问题描述
求13的13次方的最后三位数
算法分析
正常的思路是将13做次方运算结果为302875106592253然后再取最后三位数,但int的取值范围为-2147483648~2147483647并不能完全表示
13*13 = 169
169*13 = 2197
2197*13 = 28561
研究算法规律可以知道在计算下一次的乘积时,只需取上次运算结果的后三位即可(结果%1000)当然使用更高的数据类型来存放运算结果如长整型long(-9223372036854774808~9223372036854774807)当然这么做就失去了这道题的灵魂
代码实现
package funnyInteger;
/**
* @author 叶清逸
* @date 2018年7月14日上午10:38:14
* @version 1.0
* @project funnyInteger
*/
public class Q7_TailNumber {
/**
* 问题描述:求13的13次方的最后三位数
*
* 算法分析:正常的思路是将13做次方运算结果为302875106592253然后再取最后三位数,但是int的取值范围为-2147483648~2147483647
* 并不能完全表示
* 13*13 = 169
* 169*13 = 2197
* 2197*13 = 28561
* 研究算法规律可以知道在计算下一次的乘积时,只需取上次运算结果的后三位即可(结果%1000)当然使用更高的数据类型来存
* 放运算结果如长整型long(-9223372036854774808~9223372036854774807)
*/
public static void main(String[] args) {
/*初始化a和b用于计算a的b次方*/
int a = 13 ;
int b = 13 ;
/*result用于存放结果*/
int result = 1 ;
/*计算a的b次方*/
for(int i=1 ; i<=b ; i++){
result = (result*a)%1000 ;
}
/*输出运算结果*/
System.out.println(a+"的"+b+"次方的后三位为:"+result);
}
}
样例输出
253