ZeroJudge E558: Digit Generator

同題:UVa 01583-Digit Generator

對於正整數 N,N 的 digit-sum 定義為N本身及其所有位數數字的總和。
當 M 是 N 的 digit-sum 時,我們稱 N 為 M 的 generator。
例如:245 的數字總和為 256 (= 245 + 2 + 4 + 5)。 因此,245 是 256 的 generator。
不過,有些數字沒有任何 generator,而有些數字有多個 generator。
例如:216 的 generator 是 198 和 207。
你將寫一個程式來查找給定整數的最小 generator。

範例測資

範例輸入範例輸出
輸入第一行包含一個整數 T,T 代表有幾組測資。
每組測資有一個整數 N (1 ≤ N ≤ 100000)。
對於每組測資,輸出 N 的最小 generator。
如果 N 沒有任何 generator,則輸出「0」。
3
216
121
2005
198
0
1979

解題思路

跑 For迴圈 從 1 到 N-1 逐一判斷,將目前跑到的數字換成字串之後一個位數一個位數進行相加並判斷是否加起來是 N。

範例程式碼-ZeroJudge E558: Digit Generator

#include <iostream>
using namespace std;

int main() {
    cin.sync_with_stdio(0);
    cin.tie(0);
    int T;
    cin >> T;
    for (int i = 0; i<T; i++) {
        int N;
        cin >> N;
        bool ok = false;
        for (int j = 1; j<N; j++) {
            string str = to_string(j);
            int calc = j;
            for (int k = 0; k<str.length(); k++) calc += str[k]-'0';
            if (calc == N) {
                cout << j << "\n";
                ok = true;
                break;
            }
        }
        if (!ok) cout << "0\n";
    }
}

//ZeroJudge E558
//Dr. SeanXD

發佈留言