2011-12-20 05:12:48
地址:http://acm.hdu.edu.cn/showproblem.php?pid=2352
题意:罗马数字转阿拉伯数字。
mark:居然wa了一次。把%d写成了%s,太2了。
看似麻烦,其实简单。降序为正,升序为负,遍历即可。
代码:
# include <stdio.h>
char str[110] ;
int num[110] ;
int n ;
int calc()
{
int i, j, ans = 0 ;
for (i = 0 ; i < n ; i++)
{
ans += num[i] ;
for (j = i-1 ; j >= 0 && num[j] < num[i] ; j--)
ans -= 2*num[j] ;
}
return ans ;
}
int GetNumber(char ch)
{
switch (ch)
{
case 'I': return 1 ;
case 'V': return 5 ;
case 'X': return 10 ;
case 'L': return 50 ;
case 'C': return 100 ;
case 'D': return 500 ;
case 'M': return 1000 ;
}
return -1 ;
}
int main ()
{
int i, T;
scanf ("%d%*c", &T) ;
while (T--)
{
scanf ("%s", str) ;
for (i = 0 ; str[i] ;i++)
num[i] = GetNumber(str[i]) ;
n = i ;
printf ("%d\n", calc()) ;
}
return 0 ;
}