PTA_ B _1019デジタルブラックホール(C ++ _アナログ)

我々は最初の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;
}
公開された228元の記事 ウォン称賛30 ビュー10000 +

おすすめ

転載: blog.csdn.net/qq_43510916/article/details/104351286