西绪福斯黑洞(123数字黑洞)——java实现

西绪福斯黑洞(123数字黑洞)
数学中的123就跟英语中的ABC一样平凡和简单。然而,按以下运算顺序,就可以观察到这个最简单的数字
黑洞的值:
设定一个任意数字串,数出这个数中的偶数个数,奇数个数,及这个数中所包含的所有位数的总数,
例如:1234567890,
偶:数出该数数字中的偶数个数,在本例中为2,4,6,8,0,总共有 5 个。
奇:数出该数数字中的奇数个数,在本例中为1,3,5,7,9,总共有 5 个。
总:数出该数数字的总个数,本例中为 10 个。
新数:将答案按 “偶-奇-总” 的位序,排出得到新数为:5510。
重复:将新数5510按以上算法重复运算,可得到新数:134。
重复:将新数134按以上算法重复运算,可得到新数:123。
结论:对数1234567890,按上述算法,最后必得出123的结果,我们可以用计算机写出程序,测试出对任意一个数经有限次重复后都会是123。换言之,任何数的最终结果都无法逃逸123黑洞

public class BlackHole123 {
    public static void run(){
        long number = 0;        //观察数字
        long oldNumber = 0;     //用于退出条件
        int a,b,c,d;            //分别为:偶数个数,奇数个数,合计个数,临时变量
        Random random = new Random();
        number = Math.abs(random.nextLong());
        while(true){
            oldNumber = number;
            System.out.println("number:"+number);
            a = b = 0;
            while(number > 0){
                d = (int)(number % 10);
                number = number  / 10;
                if(d % 2 == 0){
                    a++;
                }else{
                    b++;
                }
            }
            c = a+b;
            number = splice(a,b,c);
            if(number == oldNumber){
                break;
            }
        }
    }
    /**拼接数字的函数,令F(12,343,43) = 1234343
     * */
    protected static long splice(int a,int b,int c){
        long res = 0;
        res += a;
        a = b;
        while(a > 0){
            res *= 10;
            a /= 10;
        }
        res += b;
        a = c;
        while(a > 0){
            res *= 10;
            a /= 10;
        }
        res += c;
        return res;
    }
}

参考运行结果:

number:3772524908909084995
number:91019
number:145
number:123
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值