算法:x的n次方

简介: 该题是用来公司教学,并无难度。用于说明算法效率差异以及循环和递归的效率差别。   package practice; import java.math.BigDecimal; /** * @author caiyu * @date 2014-12-3 */ publ...

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

 

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 = 1000;
        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 (count-- > 0) {
            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);
        }
    }

}

 

目录
相关文章
|
Ubuntu 定位技术 API
python 通过图片(原图)精确获取图片拍摄的位置,时间,设备等信息
python 通过图片(原图)精确获取图片拍摄的位置,时间,设备等信息
python 通过图片(原图)精确获取图片拍摄的位置,时间,设备等信息
|
5月前
|
数据采集 数据可视化 API
QUIC协议优化:HTTP/3环境下的超高速异步抓取方案
本文介绍了一种基于QUIC和HTTP/3的异步爬虫方案,用于抓取知乎热榜数据并生成趋势图。通过HTTPX与aioquic结合实现高性能连接复用,配合代理IP绕过反爬限制,提取标题、热度等信息。利用Python代码示例展示了异步抓取流程,并借助Matplotlib绘制话题热度变化图表。分析显示突发热点生命周期短,而深度话题热度更稳定。此方案可优化内容运营策略,快速捕捉潜在爆款话题。
186 4
QUIC协议优化:HTTP/3环境下的超高速异步抓取方案
|
Java API
SpringBoot 整合swagger3.X
SpringBoot 整合swagger3.X
771 0
|
算法 Java
闲话银行家舍入法,以及在程序中如何实现
闲话银行家舍入法,以及在程序中如何实现
454 0
|
12月前
|
算法
递归和迭代详解
递归和迭代详解
344 1
|
存储 程序员 C++
Python中的“Short”类型模拟与理解
Python中的“Short”类型模拟与理解
262 2
|
算法 Java 数据库
Java CompletableFuture.runAsync的概念于实战
【4月更文挑战第1天】在Java中,CompletableFuture.runAsync是CompletableFuture类中的一个静态方法,用于异步执行不返回结果的任务。这使得它成为处理并发编程任务时的一个非常有用的工具,特别是在开发需要非阻塞操作的应用程序时。
1116 3
|
前端开发 Java C++
【面试题精讲】JVM-打破双亲委派机制-自定义类加载器
【面试题精讲】JVM-打破双亲委派机制-自定义类加载器
|
缓存 jenkins Java
3分钟教你linux服务器无损迁移备份Jenkins
3分钟教你linux服务器无损迁移备份Jenkins一台服务器到期,jenkins正好部署在这台服务器,这时候如果在新服务器重新安装然后配置jenkins的每个服务时间两天起步,于是考虑将原服务器jenkins无损迁移到新服务器上,时间只需3分钟,nice
956 0
使用Java替换字符串占位符的几种方法
使用Java替换字符串占位符的几种方法
611 0