470. 用 Rand7() 实现 Rand10()

已有方法 rand7 可生成 1 到 7 范围内的均匀随机整数,试写一个方法 rand10 生成 1 到 10 范围内的均匀随机整数。

public class Solution {
    public static int rand10() {
        int ans = rand2();
        for (int i = 0; i < 10; i++) {
            ans = ans << 1; //二进制左移一位
            ans = ans ^ rand2();//将随机生成的0或1,添加到二级制尾部
        }
        return (ans <= 10 && ans > 0) ? ans : rand10(); //想生成的随机数范围
    }
    //等概率生成 0 和1  用于填充二进制位
    public static int rand2() {
        int ans = rand7();
        return ans==7? rand2():ans % 2;
    }
    // 题目给定方法
    public static int rand7() {
        return new Random().nextInt(7)+1;
    }

    public static void main(String args[]) {
        //测试
        for (int i = 0; i < 100; i++) {
            System.out.print(rand10() + ",");
        }
    }
}
posted @ 2021-11-04 17:58  微笑带你去  阅读(44)  评论(0)    收藏  举报