RO2INT - Đổi số La Mã

Xem dạng PDF

Gửi bài giải

Điểm: 1,00 (OI)
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 256M
Input: stdin
Output: stdout

Người đăng:
Dạng bài
Ngôn ngữ cho phép
C, C#, C++, Go, Java, JavaScript, Kotlin, Pascal, Perl, PHP, PyPy, Python, Ruby, Rust, Scratch, Swift

Đề bài

Cho một chuỗi số La Mã hợp lệ, hãy đổi về dạng số thập phân của nó.

Được biết các ký hiệu trong số La Mã như sau:

  • I: 1
  • V: 5
  • X: 10
  • L: 50
  • C: 100
  • D: 500
  • M: 1000

Trong đó sẽ có một số trường hợp đặc biệt:

  • IV: 4
  • IX: 9
  • XL: 40
  • XC: 90
  • CD: 400
  • CM: 900

Mẫu input & output

  • Input: Gồm một chuỗi số La Mã hợp lệ.
XIII
  • Output: Dạng số thập phân của chuỗi đã cho.
13

Bình luận

Please read the guidelines before commenting.



  • 2
    tiendung11032014  đã bình luận lúc 20, Tháng 7, 2026, 1:50

    include <bits/stdc++.h>

    using namespace std;

    int gt(char c) { if (c == 'I') return 1; if (c == 'V') return 5; if (c == 'X') return 10; if (c == 'L') return 50; if (c == 'C') return 100; if (c == 'D') return 500; if (c == 'M') return 1000; return 0; }

    int main() { string s; cin >> s;

    int tong = 0;
    
    for (int i = 0; i < s.size(); i++) {
        if (i + 1 < s.size() && gt(s[i]) < gt(s[i + 1]))
            tong -= gt(s[i]);
        else
            tong += gt(s[i]);
    }
    
    cout << tong;
    
    return 0;
    

    }


  • 0
    mducc  đã bình luận lúc 15, Tháng 7, 2026, 6:38

    Hint: Duyệt từ trái sang, nếu ký tự hiện tại nhỏ hơn ký tự tiếp theo → trừ đi, ngược lại cộng vào.

    #include <bits/stdc++.h>
    using namespace std;
    int val(char c) {
        if (c == 'I') return 1;
        if (c == 'V') return 5;
        if (c == 'X') return 10;
        if (c == 'L') return 50;
        if (c == 'C') return 100;
        if (c == 'D') return 500;
        return 1000;
    }
    int main() {
        ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
        string s;
        cin >> s;
        int res = 0;
        for (int i = 0; i < s.size(); i++) {
            if (i + 1 < s.size() && val(s[i]) < val(s[i + 1]))
                res -= val(s[i]);
            else
                res += val(s[i]);
        }
        cout << res;
        return 0;
    }
    

  • -1
    tinhocqs2024  đã bình luận lúc 5, Tháng 2, 2026, 8:01

    dùng đặt chia lấy dư rối dùng kết hợp í dễ mà


  • -1
    tinhocqs2024  đã bình luận lúc 5, Tháng 2, 2026, 8:01

    dễ mà lện hơi dài thôi


  • -1
    TuanTrainning  đã bình luận lúc 21, Tháng 9, 2025, 1:34

    bruh, không hiểu gì luôn