結果
問題 | No.518 ローマ数字の和 |
ユーザー |
|
提出日時 | 2017-06-21 20:37:03 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 2 ms / 2,000 ms |
コード長 | 2,362 bytes |
コンパイル時間 | 582 ms |
コンパイル使用メモリ | 80,472 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-10-02 10:59:49 |
合計ジャッジ時間 | 1,289 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 19 |
ソースコード
#include<cstdio>#include <iostream>#include<algorithm>#include<string>#include<queue>#include<vector>#include<functional>#include<cmath>#include<map>#include<stack>#include<set>#include<numeric>using namespace std;typedef long long ll;typedef pair<int, int> Pr;int N;ll sum;int main(){cin >> N;for (int i = 0; i < N; i++) {string s;cin >> s;for (int j = 0; j < s.size(); j++) {if (s[j] == 'I') {if (j + 1 < s.size()) {if (s[j + 1] == 'X')sum += 9, j++;else if (s[j + 1] == 'V')sum += 4, j++;else sum++;}else sum++;}else if (s[j] == 'V')sum += 5;else if (s[j] == 'X' ){if(j + 1 < s.size()) {if (s[j + 1] == 'L')sum += 40, j++;else if (s[j + 1] == 'C')sum += 90, j++;else sum += 10;}else sum += 10;}else if (s[j] == 'L')sum += 50;else if (s[j] == 'C') {if(j + 1 < s.size()) {if (s[j + 1] == 'D')sum += 400, j++;else if (s[j + 1] == 'M')sum += 900, j++;else sum += 100;}else sum += 100;}else if (s[j] == 'D')sum += 500;else if (s[j] == 'M')sum += 1000;}}if (sum > 3999) {cout << "ERROR" << endl;}else {int m = sum / 1000;sum -= m * 1000;for (int i = 0; i < m; i++)cout << "M";int c = sum / 100;if (c <= 3) {for (int i = 0; i < c; i++)cout << "C";sum -= c * 100;}else{if (c == 4)cout << "CD", sum -= 400;else if (c == 5)cout << "D", sum -= 500;else if (c == 6)cout << "DC", sum -= 600;else if (c == 7)cout << "DCC", sum -= 700;else if (c == 8)cout << "DCCC", sum -= 800;else if (c == 9)cout << "CM", sum -= 900;}int x = sum / 10;if (x <= 3) {for (int i = 0; i < x; i++)cout << "X";sum -= x * 10;}else {if (x == 4)cout << "XL", sum -= 40;else if (x == 5)cout << "L", sum -= 50;else if (x == 6)cout << "LX", sum -= 60;else if (x == 7)cout << "LXX", sum -= 70;else if (x == 8)cout << "LXXX", sum -= 80;else if (x == 9)cout << "XC", sum -= 90;}if (sum <= 3) {for (int i = 0; i < sum; i++)cout << "I";}else{if (sum == 4)cout << "IV";else if (sum == 5)cout << "V";else if (sum == 6)cout << "VI";else if (sum == 7)cout << "VII";else if (sum == 8)cout << "VIII";else if (sum == 9)cout << "IX";}cout << endl;}return 0;}