[code] PTA 胡凡算法筆記 DAY038

題目 B1019 數字黑洞

在這裏插入圖片描述

  • 題意
    輸入一個4位整數,不斷執行以下規則直到爲0或者爲數字黑洞6174爲止。
    對於整數n,先將n中各數字非遞增排序後得到減數,然後遞增排序得到被減數,兩者相減。
    輸出執行過程。

  • 思路
    很明顯涉及到數字的排序,所以需要將整數進行拆分爲整型數組,所以主要完成整型到數組的轉換,以及數組到整型的轉換即可。
    注意:當輸入爲6174的時候也需要輸出。

  • Code in C++

#include <cstdio>
#include <algorithm>

bool cmp(int a, int b)
{
    return a > b;
}
// 整型轉換爲數組
void to_array(int n, int num[])
{
    for (int i = 0; i < 4 && n!= 0; ++i)
    {
        num[i] = n %10;
        n /= 10;
    }
}
// 數組轉換爲整型
int to_number(int num[])
{
    int result = 0;
    for (int i = 0; i < 4; ++i)
    {
        result = result * 10 + num[i];
    }

    return result;
}

int main()
{
    int n, MAX, MIN;
    scanf("%d", &n);
    int num[5];
    while (1)
    {
        to_array(n, num);
        std::sort(num, num + 4);
        MIN = to_number(num);
        std::sort(num, num + 4, cmp);
        MAX = to_number(num);
        n = MAX - MIN;
        printf("%04d - %04d = %04d\n", MAX, MIN, n);
        if (n == 0 || n == 6174) break;
    }
    return 0;
}

小結

我開始是使用的字符串類型進行存儲,但是在使用過程中會出現一些問題,比如對零的判斷,然後就是在執行一個case的時候超時了,可能是通過istringstream進行數字和字符串的轉換過程耗時太多導致。之後儘量用簡潔的方式去實現。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章