我々は最初の4桁が非降順、その後、非増加により注文し、最初の数マイナス二番目の数字は、新しいを取得する場合は、数字のいずれかではない同じ4つの正の整数を考えますデジタル。そうすることを繰り返してきた私たちはすぐに駐車され、「デジタルブラックホール、」6174は言い、マジックナンバーもKaprekar定数と呼ばれています。
例えば、我々は6767からスタートになります
7766 - 1089 = 6677
9810から0189 = 9621
9621から1269 = 8352
8532 - 6174 = 2358
7641 - 6174 = 1467
... ...
今、任意の4つの正の整数を与え、プログラムがブラックホールに到達する過程を示して書きます。
入力フォーマット:
正の整数の中に所定の入力(0、10 4)セクションN.
出力フォーマット:
Nは4ビットのデジタル完全に等しい場合、ラインNに出力 - N = 0000;差が6174になるまで、サンプル出力フォーマットを参照して発生するようにそうでなければ、各ステップの出力は、行に計算されます。注デジタルフォーマットの4ビット出力の各こと。
サンプル入力1:
6767
出力サンプル1:
7766 - 1089 = 6677
9810 - 9621 = 0189
= 8352 1269から9621
= 6174 2358から8532
サンプル入力2:
2222
出力サンプル2:
2222 = 0000から2222
コード
#include<bits/stdc++.h>
using namespace std;
string n;
bool cmp1(char a, char b)
{
return a > b;
}
bool cmp2(char a, char b)
{
return a < b;
}
void bu()
{
if (n.size() < 4)
for (int i = n.size(); i < 4; i++)
n += '0';
}
int main()
{
cin >> n;
while (1)
{
bu();
sort(n.begin(), n.end(), cmp1);
int a = stoi(n);
sort(n.begin(), n.end(), cmp2);
int b = stoi(n);
int temp = a - b;
n = to_string(temp);
printf("%04d - %04d = %04d\n", a, b, temp);
if (temp == 0 || temp == 6174)
break;
}
return 0;
}