HDU 2352 Verdis Quo
罗马数字转化为十进制的值
题目非常的长
提取有效信息
并且介绍很多规则 但是事实上有用的信息就是如何加
什么时候减 当当前字母小于下一个字母时 减去当前字母的值
1 #include <iostream> 2 #include <stdio.h> 3 #include <string.h> 4 #define READ() freopen("in.txt", "r", stdin); 5 6 using namespace std; 7 8 int Map(char ch) 9 { 10 int n; 11 switch(ch) 12 { 13 case 'I': n = 1;break; 14 case 'V': n = 5;break; 15 case 'X': n = 10; break; 16 case 'L': n = 50; break; 17 case 'C': n = 100; break; 18 case 'D': n = 500; break; 19 case 'M': n = 1000; break; 20 default : n = 0;break; 21 } 22 return n; 23 } 24 int main() 25 { 26 int T; 27 char in[128]; 28 scanf("%d", &T); 29 getchar(); 30 while (T--) 31 { 32 gets(in); 33 int ans = 0; 34 int len = strlen(in); 35 char pre, nxt; 36 for (int i = 0; i < len; i++) 37 { 38 pre = in[i]; 39 if(i < len-1) nxt = in[i+1]; 40 else nxt = ' '; 41 if (Map(pre) >= Map(nxt)) ans+= Map(pre); 42 else ans -= Map(pre); 43 } 44 printf("%d\n", ans); 45 } 46 return 0; 47 }