給定任乙個各位數字不完全相同的 4 位正整數,如果我們先把 4 個數字按非遞增排序,再按非遞減排序,然後用第 1 個數字減第 2 個數字,將得到乙個新的數字。一直重複這樣做,我們很快會停在有「數字黑洞」之稱的 6174,這個神奇的數字也叫 kaprekar 常數。
例如,我們從6767開始,將得到
7766 - 6677 = 1089現給定任意 4 位正整數,請編寫程式演示到達黑洞的過程。9810 - 0189 = 9621
9621 - 1269 = 8352
8532 - 2358 = 6174
7641 - 1467 = 6174
… …
輸入給出乙個(0,
104
)
(0,10^4)
(0,10
4)
區間內的正整數 n。
如果 n 的 4 位數字全相等,則在一行內輸出 n−n
=0000
n - n = 0000
n−n=00
00;否則將計算的每一步在一行內輸出,直到 6174 作為差出現,輸出格式見樣例。注意每個數字按 4 位數格式輸出。
7766 - 6677 = 10899810 - 0189 = 9621
9621 - 1269 = 8352
8532 - 2358 = 6174
2222 - 2222 = 0000注意事項:
輸入值可能只有乙個數字,需要手動補 『0』;
差值不一定為 4 位數;
ps:**能用,但很不美觀。
#include
#include
#include
#include
using
namespace std;
bool
cmp1
(char a,
char b)
bool
cmp2
(char a,
char b)
intmain()
;char tmp[5]
;int n1, n2, differ;
stringstream is;
cin >> num;
if(num[1]
=='\0'
) num[1]
='0';if
(num[2]
=='\0'
) num[2]
='0';if
(num[3]
=='\0'
) num[3]
='0';if
(num[0]
== num[1]
&& num[2]
== num[3]
&& num[0]
== num[2]
)doelse
if(tmp[2]
=='\0'
)else
if(tmp[3]
=='\0')}
else
cout <<
setw(4
)<<
setfill
('0'
)<< n1;
cout <<
" - "
; cout <<
setw(4
)<<
setfill
('0'
)<< n2;
cout <<
" = "
; cout <<
setw(4
)<<
setfill
('0'
)<< differ << endl;
}while
(differ !=
6174);
}
1019 數字黑洞
給定任乙個各位數字不完全相同的4位正整數,如果我們先把4個數字按非遞增排序,再按非遞減排序,然後用第1個數字減第2個數字,將得到乙個新的數字。一直重複這樣做,我們很快會停在有 數字黑洞 之稱的6174,這個神奇的數字也叫kaprekar常數。例如,我們從6767開始,將得到 7766 6677 10...
1019 數字黑洞
1019.數字黑洞 給定任乙個各位數字不完全相同的4位正整數,如果我們先把4個數字按非遞增排序,再按非遞減排序,然後用第1個數字減第2個數字,將得到乙個新的數字。一直重複這樣做,我們很快會停在有 數字黑洞 之稱的6174,這個神奇的數字也叫kaprekar常數。例如,我們從6767開始,將得到 77...
1019 數字黑洞
時間限制 100 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 chen,yue 給定任乙個各位數字不完全相同的4位正整數,如果我們先把4個數字按非遞增排序,再按非遞減排序,然後用第1個數字減第2個數字,將得到乙個新的數字。一直重複這樣做,我們很快會停...