Java 使用位移运算实现乘法

import java.util.Scanner;

/**
 * @author Gaojie
 * @date 2018/7/23 10:15
 * 程序开发中的乘法运算一般是通过 * 或 BigDecimal 类的 multiply();
 * 该实例使用位移运算实现乘法 运算效率较高
 * 一个数左移运算 n次就等于这个数乘以 2的n次方
 * 一个数右移运算 n次就等于这个数除以 2的n次方
 */
public class Example {

    /**
     * 判断a是b的几次方
     *
     * @param a
     * @param b
     * @return
     */

    public static double log(double a, double b) {
        return Math.log(a) / Math.log(b);
    }

    /**
     * 判断double是否是整数
     *
     * @param obj
     * @return
     */
    public static boolean isIntegerForDouble(double obj) {
        double eps = 1e-10;  // 精度范围
        return obj - Math.floor(obj) < eps;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        int b = sc.nextInt();
        double power = log(b, 2); // 判断a是b的几次方
        
        if (isIntegerForDouble(power)) { //判断double是否是整数
            System.out.println(a << (int) power);
        } else {
            System.out.println(a * b);
        }

    }
}

 

你可能感兴趣的:(计算机)