西绪福斯黑洞(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