2013年8月20日

UVa 11616 - Roman Numerals

#include <cstdio>
#include <string>
#include <map>
using namespace std;

const int SIZE = 13;
const int value[] = {1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000};
const string sign[] = {"I", "IV", "V", "IX", "X", "XL", "L", "XC", "C", "CD", "D", "CM", "M"};

int main() {
  map<string, string> dic;
  for (int n = 1; n < 4000; n++) {
    int num = n;
    string roman;
    for (int i = SIZE - 1; i >= 0 && num; i--) {
      while (num >= value[i]) {
        roman += sign[i];
        num -= value[i];
      }
    }
    char s[99];
    sprintf(s, "%d", n);
    dic[s] = roman;
    dic[roman] = s;
  }
  char s[99];
  while (gets(s)) {
    puts(dic[s].c_str());
  }
  return 0;
}

沒有留言:

張貼留言