using System;
using System.Linq;
public class RomanNumeral
{
const int NaN = -1;
private static int ToInteger(string roman_numeral) {
string ro_num = roman_numeral.ToUpper().Trim();
char[] ro_num_array = ro_num.ToCharArray();
if (ro_num == "N") { return 0; }
char[] symbols = { 'I', 'V', 'X', 'L', 'C', 'D', 'M' };
int [] values = { 1, 5, 10, 50, 100, 500, 1000 };
int int_num = 0;
int symb_it = 0, symb_consec = 0;
bool to_parse = true;
int subtrahend = 0, didgit = -1;
foreach (char ro_num_char in ro_num_array.Reverse<char>()) {
Console.WriteLine(ro_num_char);
do
{
if (ro_num_char == symbols[symb_it])
{
symb_consec += (symb_it%2==1)? 3:1;
if (symb_consec > 3) {
Console.WriteLine("symb_consec>3");return NaN;
}
didgit = symb_it/2*2+2;
Console.WriteLine("Didgit: " + didgit);
subtrahend = ((symb_it-1)/2)*2;
int_num += values[symb_it];
to_parse = false;
Console.WriteLine(values[symb_it]);
}
else if ((ro_num_char == symbols[subtrahend]))
{
if (didgit == symb_it) { return NaN; }
didgit = symb_it;
int_num -= values[subtrahend];
to_parse = false;
//Console.WriteLine(over_six);
}
if (to_parse) {
symb_it++;
if (symb_it > 6) { Console.WriteLine("symb_it>6");return NaN; }
symb_consec = 0;
}
} while (to_parse);
to_parse = true;
}
return int_num;
}
public static void Main()
{
int test = RomanNumeral.ToInteger("MMCMXCIV");
Console.WriteLine(String.Format("{0:D0}",test));
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uTGlucTsKCnB1YmxpYyBjbGFzcyBSb21hbk51bWVyYWwKewogICAgY29uc3QgaW50IE5hTiA9IC0xOwogICAgcHJpdmF0ZSBzdGF0aWMgaW50IFRvSW50ZWdlcihzdHJpbmcgcm9tYW5fbnVtZXJhbCkgewogICAgICAgIHN0cmluZyByb19udW0gPSByb21hbl9udW1lcmFsLlRvVXBwZXIoKS5UcmltKCk7CiAgICAgICAgY2hhcltdICByb19udW1fYXJyYXkgPSByb19udW0uVG9DaGFyQXJyYXkoKTsKICAgICAgICBpZiAocm9fbnVtID09ICJOIikgeyByZXR1cm4gMDsgfQogICAgICAgIAogICAgICAgIGNoYXJbXSBzeW1ib2xzID0geyAnSScsICdWJywgJ1gnLCAnTCcsICdDJywgJ0QnLCAnTScgfTsKICAgICAgICBpbnQgW10gdmFsdWVzID0geyAxLCA1LCAxMCwgNTAsIDEwMCwgNTAwLCAxMDAwIH07CiAgICAgICAgaW50IGludF9udW0gPSAwOwogICAgICAgIGludCBzeW1iX2l0ID0gMCwgc3ltYl9jb25zZWMgPSAwOwogICAgCiAgICAgICAgYm9vbCB0b19wYXJzZSA9IHRydWU7CiAgICAgICAgaW50IHN1YnRyYWhlbmQgPSAwLCBkaWRnaXQgPSAtMTsKICAgICAgICBmb3JlYWNoIChjaGFyIHJvX251bV9jaGFyIGluIHJvX251bV9hcnJheS5SZXZlcnNlPGNoYXI+KCkpIHsKICAgICAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUocm9fbnVtX2NoYXIpOwogICAgICAgICAgICBkbwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAocm9fbnVtX2NoYXIgPT0gc3ltYm9sc1tzeW1iX2l0XSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBzeW1iX2NvbnNlYyArPSAoc3ltYl9pdCUyPT0xKT8gMzoxOwogICAgICAgICAgICAgICAgICAgIGlmIChzeW1iX2NvbnNlYyA+IDMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoInN5bWJfY29uc2VjPjMiKTtyZXR1cm4gTmFOOyAKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZGlkZ2l0ID0gc3ltYl9pdC8yKjIrMjsKICAgICAgICAgICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZSgiRGlkZ2l0OiAiICsgZGlkZ2l0KTsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBzdWJ0cmFoZW5kID0gKChzeW1iX2l0LTEpLzIpKjI7CiAgICAgICAgICAgICAgICAgICAgaW50X251bSArPSB2YWx1ZXNbc3ltYl9pdF07CiAgICAgICAgICAgICAgICAgICAgdG9fcGFyc2UgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZSh2YWx1ZXNbc3ltYl9pdF0pOwogICAgICAgICAgICAgICAgfSAKICAgICAgICAgICAgICAgIGVsc2UgaWYgKChyb19udW1fY2hhciA9PSBzeW1ib2xzW3N1YnRyYWhlbmRdKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpZiAoZGlkZ2l0ID09IHN5bWJfaXQpIHsgcmV0dXJuIE5hTjsgfQogICAgICAgICAgICAgICAgICAgIGRpZGdpdCA9IHN5bWJfaXQ7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgaW50X251bSAtPSB2YWx1ZXNbc3VidHJhaGVuZF07CiAgICAgICAgICAgICAgICAgICAgdG9fcGFyc2UgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAvL0NvbnNvbGUuV3JpdGVMaW5lKG92ZXJfc2l4KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICh0b19wYXJzZSkgewogICAgICAgICAgICAgICAgICAgIHN5bWJfaXQrKzsKICAgICAgICAgICAgICAgICAgICBpZiAoc3ltYl9pdCA+IDYpIHsgQ29uc29sZS5Xcml0ZUxpbmUoInN5bWJfaXQ+NiIpO3JldHVybiBOYU47IH0KICAgICAgICAgICAgICAgICAgICBzeW1iX2NvbnNlYyA9IDA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gd2hpbGUgKHRvX3BhcnNlKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIHRvX3BhcnNlID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGludF9udW07CiAgICB9CiAgICBwdWJsaWMgc3RhdGljIHZvaWQgTWFpbigpCiAgICB7CiAgICAgICAgaW50IHRlc3QgPSBSb21hbk51bWVyYWwuVG9JbnRlZ2VyKCJNTUNNWENJViIpOwogICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKFN0cmluZy5Gb3JtYXQoInswOkQwfSIsdGVzdCkpOwogICAgfQp9