[恢]hdu 2352

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 ;
}



posted @ 2012-01-06 22:43  Seraph2012  阅读(143)  评论(0编辑  收藏  举报