算法_趣味整数_Question7_高次方的尾数(java实现)

这篇文章讲述的是算法趣味整数部分的高次方的尾数问题的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

猜你喜欢

转载自blog.csdn.net/u013634252/article/details/81041968
今日推荐