結果
| 問題 |
No.518 ローマ数字の和
|
| コンテスト | |
| ユーザー |
ooh_20
|
| 提出日時 | 2017-06-02 12:09:58 |
| 言語 | C#(csc) (csc 3.9.0) |
| 結果 |
AC
|
| 実行時間 | 25 ms / 2,000 ms |
| コード長 | 4,874 bytes |
| コンパイル時間 | 793 ms |
| コンパイル使用メモリ | 112,636 KB |
| 実行使用メモリ | 17,920 KB |
| 最終ジャッジ日時 | 2024-09-21 22:08:38 |
| 合計ジャッジ時間 | 1,972 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 19 |
コンパイルメッセージ
Microsoft (R) Visual C# Compiler version 3.9.0-6.21124.20 (db94f4cc) Copyright (C) Microsoft Corporation. All rights reserved.
ソースコード
using System;
namespace No._518
{
class Program
{
static void Main(string[] args)
{
int N = int.Parse(Console.ReadLine());
string[] roma = Console.ReadLine().Split();
Program program = new Program();
int sum = 0;
for (int i = 0; i < N; i++)
{
sum += program.CharToNum(roma[i].ToCharArray());
}
string ans = program.NumToChar(sum);
Console.WriteLine(ans);
}
public int CharToNum(char[] roma)
{
int result = 0;
Array.Reverse(roma);
for (int i = 0; i < roma.Length; i++)
{
switch (roma[i])
{
case 'M':
result += 1000;
break;
case 'D':
result += 500;
break;
case 'C':
if (i != 0)
{
if (roma[i - 1] == 'M' || roma[i - 1] == 'D')
{
result -= 100;
break;
}
}
result += 100;
break;
case 'L':
result += 50;
break;
case 'X':
if (i != 0)
{
if (roma[i - 1] == 'L' || roma[i - 1] == 'C')
{
result -= 10;
break;
}
}
result += 10;
break;
case 'V':
result += 5;
break;
case 'I':
if (i != 0)
{
if (roma[i - 1] == 'V' || roma[i - 1] == 'X')
{
result -= 1;
break;
}
}
result += 1;
break;
}
}
return result;
}
public string NumToChar(int number)
{
if (number > 3999)
{
return "ERROR";
}
string result = "";
if (number >= 1000)
{
int n = number / 1000;
number %= 1000;
while (n > 0)
{
result += "M";
n--;
}
}
if (number >= 100)
{
int n = number / 100;
number %= 100;
if (n == 9)
{
result += "CM";
n -= 9;
}
else if (8 >= n && n >= 5)
{
result += "D";
n -= 5;
}
else if (n == 4)
{
result += "CD";
n -= 4;
}
while (n > 0)
{
result += "C";
n--;
}
}
if (number >= 10)
{
int n = number / 10;
number %= 10;
if (n == 9)
{
result += "XC";
n -= 9;
}
else if (8 >= n && n >= 5)
{
result += "L";
n -= 5;
}
else if (n == 4)
{
result += "XL";
n -= 4;
}
while (n > 0)
{
result += "X";
n--;
}
}
if (number >= 1)
{
if (number == 9)
{
result += "IX";
number -= 9;
}
else if (8 >= number && number >= 5)
{
result += "V";
number -= 5;
}
else if (number == 4)
{
result += "IV";
number -= 4;
}
while (number > 0)
{
result += "I";
number--;
}
}
return result;
}
}
}
ooh_20