PAT乙級——1009 數字黑洞 (C/C++)
阿新 • • 發佈:2019-01-06
時間限制 1000 ms 記憶體限制 32768 KB 程式碼長度限制 100 KB
題目描述
給定任一個各位數字不完全相同的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
這道題注意 如果某些位等於0 需要補零,還有判斷等於0的特殊情況。
貼程式碼:
#include <iostream> #include <algorithm> #include <vector> using namespace std; void BlackHole(int &n) { vector<int> v(4); for (int i = 0; i < 4; ++i) { v[i] = n % 10; n /= 10; } sort(v.begin(), v.end()); int largeNum = 1000 * v[3] + 100 * v[2] + 10 * v[1] + v[0]; int smallNum = 1000 * v[0] + 100 * v[1] + 10 * v[2] + v[3]; printf("%04d - %04d = %04d\n", largeNum, smallNum, largeNum - smallNum); n = largeNum - smallNum; } int main(void) { int N; cin>>N; while(N != 6174 && N != 0) { BlackHole(N); } return 0; }