結果
問題 | No.518 ローマ数字の和 |
ユーザー |
|
提出日時 | 2017-05-28 22:57:37 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 3 ms / 2,000 ms |
コード長 | 2,823 bytes |
コンパイル時間 | 1,541 ms |
コンパイル使用メモリ | 169,180 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-09-21 15:44:28 |
合計ジャッジ時間 | 2,286 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 19 |
ソースコード
#include <bits/stdc++.h>using namespace std;namespace{int ValRome( const char *lpRome ){int i;int iVal;iVal = 0;i = 0;while( lpRome[ i ] == 'M' ){iVal += 1000;i++;}if( lpRome[ i ] == 'D' ){iVal += 500;i++;}if( lpRome[ i ] == 'C' ){i++;if( lpRome[ i ] == 'M' ){iVal += 900;i++;}else if( lpRome[ i ] == 'D' ){iVal += 400;i++;}elseiVal += 100;while( lpRome[ i ] == 'C' ){iVal += 100;i++;}}if( lpRome[ i ] == 'L' ){iVal += 50;i++;}if( lpRome[ i ] == 'X' ){i++;if( lpRome[ i ] == 'C' ){iVal += 90;i++;}else if( lpRome[ i ] == 'L' ){iVal += 40;i++;}elseiVal += 10;while( lpRome[ i ] == 'X' ){iVal += 10;i++;}}if( lpRome[ i ] == 'V' ){iVal += 5;i++;}if( lpRome[ i ] == 'I' ){i++;if( lpRome[ i ] == 'X' ){iVal += 9;i++;}else if( lpRome[ i ] == 'V' ){iVal += 4;i++;}elseiVal += 1;while( lpRome[ i ] == 'I' ){iVal += 1;i++;}}return iVal;}void StrRome( const int iRome ){int iVal;iVal = iRome;if( iVal > 3999 ) return;while( iVal >= 1000 ){cout << "M";iVal -= 1000;}if( iVal >= 900 ){cout << "CM";iVal -= 900;}else if( iVal >= 800 ){cout << "DCCC";iVal -= 800;}else if( iVal >= 700 ){cout << "DCC";iVal -= 700;}else if( iVal >= 600 ){cout << "DC";iVal -= 600;}else if( iVal >= 500 ){cout << "D";iVal -= 500;}else if( iVal >= 400 ){cout << "CD";iVal -= 400;}while( iVal >= 100 ){cout << "C";iVal -= 100;}if( iVal >= 90 ){cout << "XC";iVal -= 90;}else if( iVal >= 80 ){cout << "LXXX";iVal -= 80;}else if( iVal >= 70 ){cout << "LXX";iVal -= 70;}else if( iVal >= 60 ){cout << "LX";iVal -= 60;}else if( iVal >= 50 ){cout << "L";iVal -= 50;}else if( iVal >= 40 ){cout << "XL";iVal -= 40;}while( iVal >= 10 ){cout << "X";iVal -= 10;}if( iVal >= 9 ){cout << "IX";iVal -= 9;}else if( iVal >= 8 ){cout << "VIII";iVal -= 8;}else if( iVal >= 7 ){cout << "VII";iVal -= 7;}else if( iVal >= 6 ){cout << "VI";iVal -= 6;}else if( iVal >= 5 ){cout << "V";iVal -= 5;}else if( iVal >= 4 ){cout << "IV";iVal -= 4;}while( iVal >= 1 ){cout << "I";iVal -= 1;}cout << endl;}} // namespaceint main( int argc, char *argv[] ){int i;int N;char R[ 110 ];int iSum;ios::sync_with_stdio( false );cin.tie( 0 );cin >> N;iSum = 0;for( i = 0; i < N; i++ ){cin >> R;iSum += ValRome( R );}if( iSum > 3999 )cout << "ERROR" << endl;elseStrRome( iSum );return 0;}