1019 數字黑洞 20 分

2021-09-26 11:07:06 字數 1612 閱讀 8348

給定任乙個各位數字不完全相同的 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位數格式輸出。

6767
7766 - 6677 = 1089

9810 - 0189 = 9621

9621 - 1269 = 8352

8532 - 2358 = 6174

2222
2222 - 2222 = 0000
差兩分的**:

#includeusing namespace std;

int n,a[4],bj=0,j=0;

int func1()

void func2(int x)

sort(a,a+4);

}int main()while(n!=6174&&n!=0);

return 0;

}

#includeusing namespace std;

bool cmp(char x,char y)

int main(){

string s;

cin>>s;

s.insert(0,4-s.length(),'0');

do{string a=s,b=s;

sort(a.begin(),a.end(),cmp);

sort(b.begin(),b.end());

int result=stoi(a)-stoi(b);

s=to_string(result);

s.insert(0,4-s.length(),'0');

cout《我一開始也想用字串做,可是有很多函式不知道也不會用,通過這道題學到了:

s.insert(0,4-s.length(),'0')    在0位置插入4-s.length()個『0』

第乙個sort按照自己寫的排序方法從大到小排序,第二個sort使用預設的排序方法從小到大排序

stoi(字串)是把字串轉換成數字,這是std c++11才有的

to_string(數字)是把數字轉換成字串

最後的比較也很簡潔,直接用=比較就行了

1019 數字黑洞 (20 分)

給定任乙個各位數字不完全相同的 4 位正整數,如果我們先把 4 個數字按非遞增排序,再按非遞減排序,然後用第 1 個數字減第 2 個數字,將得到乙個新的數字。一直重複這樣做,我們很快會停在有 數字黑洞 之稱的6174,這個神奇的數字也叫 kaprekar 常數。例如,我們從6767開始,將得到 77...

1019 數字黑洞 (20 分)

1019 數字黑洞 20 分 給定任乙個各位數字不完全相同的 4 位正整數,如果我們先把 4 個數字按非遞增排序,再按非遞減排序,然後用第 1 個數字減第 2 個數字,將得到乙個新的數字。一直重複這樣做,我們很快會停在有 數字黑洞 之稱的 6174,這個神奇的數字也叫 kaprekar 常數。例如,...

1019 數字黑洞 (20 分)

1019 數字黑洞 20 分 給定任乙個各位數字不完全相同的 4 位正整數,如果我們先把 4 個數字按非遞增排序,再按非遞減排序,然後用第 1 個數字減第 2 個數字,將得到乙個新的數字。一直重複這樣做,我們很快會停在有 數字黑洞 之稱的 6174,這個神奇的數字也叫 kaprekar 常數。例如,...