結果

問題 No.518 ローマ数字の和
ユーザー aceroidaceroid
提出日時 2017-05-28 22:48:56
言語 C++11
(gcc 11.4.0)
結果
WA  
実行時間 -
コード長 2,405 bytes
コンパイル時間 652 ms
コンパイル使用メモリ 57,676 KB
実行使用メモリ 4,348 KB
最終ジャッジ日時 2023-10-21 14:27:47
合計ジャッジ時間 1,499 ms
ジャッジサーバーID
(参考情報)
judge13 / judge10
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 2 ms
4,348 KB
testcase_01 WA -
testcase_02 WA -
testcase_03 WA -
testcase_04 WA -
testcase_05 WA -
testcase_06 WA -
testcase_07 AC 1 ms
4,348 KB
testcase_08 WA -
testcase_09 WA -
testcase_10 WA -
testcase_11 WA -
testcase_12 WA -
testcase_13 WA -
testcase_14 WA -
testcase_15 WA -
testcase_16 WA -
testcase_17 WA -
testcase_18 WA -
testcase_19 WA -
testcase_20 WA -
testcase_21 AC 2 ms
4,348 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

#include "iostream"
#include <string>

using namespace std;

void print(int x, char a);

int main()
{
	char alavia[8] = "MDCLXVI";
	string change;
	int S = 0, sum = 0, Asum = 0, V5 = 0, X10 = 0, L50 = 0, C100 = 0, D500 = 0, M1000 = 0;
	cin >> S;
	for (int i = 0; i < S; i++) {
		cin >> change;
		int m = change.size();
		for (int j = 0; j < m; j++) {
			if (change[j] == 'I') {
				if ((j + 1) < m) {
					if (change[j + 1] == 'V') {
						sum += 4;
						j++;
					}
					else if (change[j + 1] == 'X') {
						sum += 9;
						j++;
					}
					else
						sum += 1;
				}
			}
			else if (change[j] == 'V')
				sum += 5;
			else if (change[j] == 'X') {
				if ((j + 1) < m) {
					if (change[j + 1] == 'L') {
						sum += 40;
						j++;
					}
					else if (change[j + 1] == 'C') {
						sum += 90;
						j++;
					}
					else
						sum += 10;
				}
			}
			else if (change[j] == 'L')
				sum += 50;
			else if (change[j] == 'C') {
				if ((j + 1) < m) {
					if (change[j + 1] == 'D') {
						sum += 400;
						j++;
					}
					else if (change[j + 1] == 'M') {
						sum += 900;
						j++;
					}
					else
						sum += 100;
				}
			}
			else if (change[j] == 'D')
				sum += 500;
			else
				sum += 1000;
		}
		if (sum > 3999) {
			cout << "ERROR";
			return 0;
		}
		else {
			Asum += sum;
			sum = 0;
		}

	}
	if (Asum > 3999) {
		cout << "ERROR";
	}

	else {
		if (Asum > 999) {
			M1000 = Asum / 1000;
			print(M1000, alavia[0]);
			Asum = Asum % 1000;
		}
		if (Asum > 899) {
			cout << "CM";
			Asum -= 900;
		}
		if(Asum > 499) {
			D500 = Asum / 500;
			print(D500, alavia[1]);
			Asum = Asum % 500;
		}
		if (Asum > 399) {
			cout << "CD";
			Asum -= 400;
		}
		if (Asum > 99) {
			C100 = Asum / 100;
			print(C100, alavia[2]);
			Asum = Asum % 100;
		}
		if (Asum > 89) {
			cout << "XC";
			Asum -= 90;
		}
		if (Asum > 49) {
			L50 = Asum / 50;
			print(L50, alavia[3]);
			Asum = Asum % 50;
		}
		if (Asum > 39) {
			cout << "XL";
			Asum -= 40;
		}
		if (Asum > 9) {
			X10 = Asum / 10;
			print(X10, alavia[4]);
			Asum = Asum % 10;
		}
		if (Asum > 8) {
			cout << "IX";
			Asum -= 9;
		}
		if (Asum > 4) {
			V5 = Asum / 5;
			print(V5, alavia[5]);
			Asum = Asum % 5;
		}
		if (Asum > 3) {
			cout << "IV";
			Asum -= 4;
		}
		if (Asum > 0) {
			print(Asum, alavia[6]);
		}
		else {
		}
	}
	

	
    return 0;
}

void print(int x, char a)
{
	for (int i = 0; i < x; i++)
		cout << a;
}
0