題目描述:測試
給定任一個各位數字不徹底相同的 4 位正整數,若是咱們先把 4 個數字按非遞增排序,再按非遞減排序,而後用第 1 個數字減第 2 個數字,將獲得一個新的數字。一直重複這樣作,咱們很快會停在有「數字黑洞」之稱的 6174,這個神奇的數字也叫 Kaprekar 常數。 例如,咱們從6767開始,將獲得 7766 - 6677 = 1089 9810 - 0189 = 9621 9621 - 1269 = 8352 8532 - 2358 = 6174 7641 - 1467 = 6174 ... ... 現給定任意 4 位正整數,請編寫程序演示到達黑洞的過程。 輸入格式: 輸入給出一個 (0,10^4 ) 區間內的正整數 N。 輸出格式: 若是 N 的 4 位數字全相等,則在一行內輸出 N - N = 0000;不然將計算的每一步在一行內輸出,直到 6174 做爲差出現,輸出格式見樣例。注意每一個數字按 4 位數格式輸出。 輸入樣例 1: 6767 輸出樣例 1: 7766 - 6677 = 1089 9810 - 0189 = 9621 9621 - 1269 = 8352 8532 - 2358 = 6174 輸入樣例 2: 2222 輸出樣例 2: 2222 - 2222 = 0000
本人AC代碼:spa
// 1019 數字黑洞 // 一個測試點沒有經過 # include <stdio.h> int main(void) { int val; // 記錄輸入的數字 int i, j; int N[4]; int max=0, min=0; scanf("%d",&val); // 將數字拆分 for (i=0; i<4; i++) { N[i] = val%10; val /= 10; } // 升序排序 for (i=1; i<4; i++) { for (j=0; j<4; j++) { if (N[i] < N[j]) { val = N[i]; N[i] = N[j]; N[j] = val; } } } min = N[0]*1000+N[1]*100+N[2]*10+N[3]; max = N[3]*1000+N[2]*100+N[1]*10+N[0]; val = max - min; while (1) { // 學會控制輸出格式 用0補齊 printf("%04d - %04d = %04d\n",max,min, val); if (val==0 || val==6174) break; // 將數字拆分 for (i=0; i<4; i++) { N[i] = val%10; val /= 10; } // 升序排序 for (i=1; i<4; i++) { for (j=0; j<4; j++) { if (N[i] < N[j]) { val = N[i]; N[i] = N[j]; N[j] = val; } } } min = N[0]*1000+N[1]*100+N[2]*10+N[3]; max = N[3]*1000+N[2]*100+N[1]*10+N[0]; val = max - min; } return 0; }
RRRblog