Java中數(shù)字黑洞實現(xiàn)代碼
給定任一個各位數(shù)字不完全相同的4位正整數(shù),如果我們先把4個數(shù)字按非遞增排序,再按非遞減排序,然后用第1個數(shù)字減第2個數(shù)字,將得到一個新的數(shù)字。一直重復這樣做,我們很快會停在有“數(shù)字黑洞”之稱的6174,這個神奇的數(shù)字也叫Kaprekar常數(shù)。
例,我們從6767開始,將得到
7766 - 6677 = 1089
9810 - 0189 = 9621
9621 - 1269 = 8352
8532 - 2358 = 6174
7641 - 1467 = 6174
現(xiàn)給定任意4位正整數(shù),請編寫程序演示到達黑洞的過程。
輸入格式:
輸入給出一個(0, 10000)區(qū)間內的正整數(shù)N。
輸出格式:
如果N的4位數(shù)字全相等,則在一行內輸出“N - N = 0000”;否則將計算的每一步在一行內輸出,直到6174作為差出現(xiàn),輸出格式見樣例。注意每個數(shù)字按4位數(shù)格式輸出。
輸入樣例1:
6767
輸出樣例1:
7766 - 6677 = 1089
9810 - 0189 = 9621
9621 - 1269 = 8352
8532 - 2358 = 6174
輸入樣例2:
2222
輸出樣例2:
2222 - 2222 = 0000
具體代碼如下:
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
int x = sc.nextInt();
int ans = ds(x)-xs(x);
if(ans==0){
System.out.printf("%04d - %04d = %04d\n",ds(x),xs(x),ans);
}else{
int n ;
do{
n = ds(x)-xs(x);
System.out.printf("%04d - %04d = %04d\n",ds(x),xs(x),n);
x = n;
}while(n!=6174);
}
}
public static int ds (int x){
int[]a = new int[4];
a[0] = x/1000;
a[1] = x/100%10;
a[2] = x/10%10;
a[3] = x%10;
Arrays.sort(a);
int sum = a[3]*1000+a[2]*100+a[1]*10+a[0];
return sum;
}
public static int xs (int x){
int[]a = new int[4];
a[0] = x/1000;
a[1] = x/100%10;
a[2] = x/10%10;
a[3] = x%10;
Arrays.sort(a);
int sum = a[0]*1000+a[1]*100+a[2]*10+a[3];
return sum;
}
}
輸出如下:
4695 9654 - 4569 = 5085 8550 - 0558 = 7992 9972 - 2799 = 7173 7731 - 1377 = 6354 6543 - 3456 = 3087 8730 - 0378 = 8352 8532 - 2358 = 6174
總結
以上是本文關于Java編程數(shù)字黑洞的代碼實現(xiàn),希望對大家學習Java有所幫助。
相關文章
Java實現(xiàn)等待所有子線程結束后再執(zhí)行一段代碼的方法
這篇文章主要介紹了Java實現(xiàn)等待所有子線程結束后再執(zhí)行一段代碼的方法,涉及java多線程的線程等待與執(zhí)行等相關操作技巧,需要的朋友可以參考下2017-08-08
Springboot繼承Keycloak實現(xiàn)單點登錄與退出功能
這篇文章主要介紹了Springboot繼承Keycloak實現(xiàn)單點登陸與退出,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-08-08

