Hướng dẫn giải của [200 đề thầy Đức] Bài 1: Thay chữ số


Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người viết lời giải.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.

Hướng dẫn giải

Với mỗi số n, thay mọi chữ số 0 trong biểu diễn thập phân bằng chữ số 5. Trường hợp n = 0 (biểu diễn là "0") cũng đổi thành 5.

Sub 1: Đổi sang xâu — ~O(log n)~

Đổi n thành xâu bằng to_string, thay từng '0' bằng '5' rồi in. Đạt 21/21 test.

#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int t;
    cin >> t;
    while (t--) {
        long long n;
        cin >> n;
        // Đổi số thành xâu chữ số, thay mọi '0' thành '5'
        string s = to_string(n);
        for (char &c : s)
            if (c == '0') c = '5';
        cout << s << "\n";
    }
    return 0;
}
Sub 2: Tách chữ số bằng phép chia — ~O(log n)~

Lấy từng chữ số từ phải sang trái bằng n % 10, nếu bằng 0 thì đổi thành 5, rồi ghép lại với trọng số lũy thừa của 10. Đạt 21/21 test.

#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int t;
    cin >> t;
    while (t--) {
        long long n;
        cin >> n;
        // Tách từng chữ số từ phải sang trái; chữ số 0 đổi thành 5
        if (n == 0) { cout << 5 << "\n"; continue; }
        long long res = 0, place = 1;
        while (n > 0) {
            long long d = n % 10;
            if (d == 0) d = 5;
            res += d * place;
            place *= 10;
            n /= 10;
        }
        cout << res << "\n";
    }
    return 0;
}

Bình luận

Hãy đọc nội quy trước khi bình luận.


Không có bình luận tại thời điểm này.