码迷,mamicode.com
首页 > 编程语言 > 详细

算法:x的n次方

时间:2014-12-03 14:12:01      阅读:302      评论:0      收藏:0      [点我收藏+]

标签:style   blog   ar   color   sp   java   for   on   div   

该题是用来公司教学,并无难度。用于说明算法效率差异以及循环和递归的效率差别。

 

package practice;

import java.math.BigDecimal;

/**
 * @author caiyu
 * @date 2014-12-3
 */
public class X_N_Square {
    static BigDecimal x = new BigDecimal(7);

    public static void main(String[] args) {
        int n = 100000;
        BigDecimal result = x;

        long time = System.currentTimeMillis();
        if (n < 5000)
            for (int i = 1; i < n; i++) {
                result = result.multiply(x);
            }
        System.out.println(System.currentTimeMillis() - time);

        if (n < 5000)
            System.out.println(result);

        time = System.currentTimeMillis();
        result = cal(n, x);
        System.out.println(System.currentTimeMillis() - time);

        if (n < 5000)
            System.out.println(result);

        time = System.currentTimeMillis();
        // 换底公式
        int count = (int) Math.floor(Math.log(n) / Math.log(2));
        result = x;
        while (true) {
            if (count-- == 0)
                break;
            result = (n >> count) % 2 == 0 ? result.multiply(result) : result
                    .multiply(result).multiply(x);
        }
        System.out.println(System.currentTimeMillis() - time);

        if (n < 5000)
            System.out.println(result);
    }

    public static BigDecimal cal(int n, BigDecimal r) {
        if (n == 1)
            return x;
        if (n % 2 == 0) {
            r = cal(n / 2, r);
            return r.multiply(r);
        } else {
            r = cal((n - 1) / 2, r);
            return r.multiply(r).multiply(x);
        }
    }

}

 

算法:x的n次方

标签:style   blog   ar   color   sp   java   for   on   div   

原文地址:http://www.cnblogs.com/anrainie/p/4139767.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!