PAT1009. 1019. 數字黑洞 (20)
阿新 • • 發佈:2018-12-11
1019. 數字黑洞 (20)
時間限制 1000 ms 記憶體限制 32768 KB 程式碼長度限制 100 KB 判斷程式 Standard (來自 小小)
題目描述
給定任一個各位數字不完全相同的4位正整數,如果我們先把4個數字按非遞增排序,再按非遞減排序,然後用第1個數字減第2個數字,將得到 一個新的數字。一直重複這樣做,我們很快會停在有“數字黑洞”之稱的6174,這個神奇的數字也叫Kaprekar常數。 例如,我們從6767開始,將得到 7766 - 6677 = 1089 9810 - 0189 = 9621 9621 - 1269 = 8352 8532 - 2358 = 6174 7641 - 1467 = 6174 ... ... 現給定任意4位正整數,請編寫程式演示到達黑洞的過程。
輸入描述:
輸入給出一個(0, 10000)區間內的正整數N。
輸出描述:
如果N的4位數字全相等,則在一行內輸出“N - N = 0000”;否則將計算的每一步在一行內輸出,直到6174作為差出現,輸出格式見樣例,每行中間沒有空行。注意每個數字按4位數格 式輸出。
輸入例子:
6767
輸出例子:
7766 - 6677 = 1089 9810 - 0189 = 9621 9621 - 1269 = 8352 8532 - 2358 = 6174
#include <iostream> #include <bits/stdc++.h> using namespace std; void ret(int n,int& mmax,int& mmin) { int a[4]; int i = 0; while(n){ a[i++] = n%10; n/=10; } sort(a,a+4); for(int i = 0; i < 4; i++){ mmin = mmin*10+a[i]; mmax = mmax*10+a[3-i]; } } int main() { int n,a = 0,b = 0; cin >> n; ret(n,a,b); if(a == b){ printf("%04d - %04d = 0000\n",a,b); } else { while(true){ printf("%04d - %04d = %04d\n",a,b,a-b); if(a-b==6174) break; n = a - b; a = b = 0; ret(n,a,b); } } return 0; }