結果
| 問題 |
No.518 ローマ数字の和
|
| コンテスト | |
| ユーザー |
okchan08
|
| 提出日時 | 2018-04-05 22:45:54 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 2,000 ms |
| コード長 | 1,511 bytes |
| コンパイル時間 | 446 ms |
| コンパイル使用メモリ | 58,084 KB |
| 実行使用メモリ | 5,376 KB |
| 最終ジャッジ日時 | 2024-06-26 10:39:32 |
| 合計ジャッジ時間 | 1,347 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 19 |
ソースコード
#include <iostream>
#include <string>
using namespace std;
int from_rome(string r){
int ret = 0;
for(int i=0;i<r.length();i++){
if(r[i] == 'I'){
if(r[i+1] == 'V') ret += 4, i++;
else if(r[i+1] == 'X') ret += 9, i++;
else ret += 1;
}else if(r[i] == 'V'){
ret += 5;
}else if(r[i] == 'X'){
if(r[i+1] == 'L') ret += 40, i++;
else if(r[i+1] == 'C') ret += 90, i++;
else ret += 10;
}else if(r[i] == 'L'){
ret += 50;
}else if(r[i] == 'C'){
if(r[i+1] == 'D') ret += 400, i++;
else if(r[i+1] == 'M') ret += 900, i++;
else ret += 100;
}else if(r[i] == 'D'){
ret += 500;
}else if(r[i] == 'M'){
ret += 1000;
}
}
return ret;
}
string dig[] = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV","I"};
int nums[] = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 };
string to_rome(int n){
string ret;
for(int i=0;i<14;i++){
if(n == 0) break;
while(n >= nums[i]){
ret += dig[i];
n -= nums[i];
}
}
return ret;
}
int main(){
string r;
int N;
cin >> N;
int sum = 0;
for(int i=0;i<N;i++){
cin >> r;
sum += from_rome(r);
}
if(sum > 3999) cout << "ERROR" << endl;
else cout << to_rome(sum) << endl;
return 0;
}
okchan08