**罗马数字转整数,整数转罗马数字。 **
**罗马数字是用字符表示的,如I,X,C,D(I表示整数多少,X表示整数多少,自己查吧)等。一串字符可以表示一个数。当表示的数值较小的字符放在右边时,该数值为相加,如VI=5+1=6,反之为相减,如IV=5-1=4. **
**(1)设计一个函数,输入一串字符序列,求其对应的整数。 **
**(2)设计一个函数,输入一个整数,求其对应的罗马数字。 **
\#include "stdafx.h"\
\
int TransToNum( char c ){\
int ret = 0;\
\
switch( c )\
{\
case 'I': ret = 1; break;\
case 'V': ret = 5; break;\
case 'X': ret = 10; break;\
case 'L': ret = 50; break;\
case 'C': ret = 100; break;\
case 'D': ret = 500; break;\
case 'M': ret = 1000; break;\
}\
\
return ret;\
}\
int RomanNumeralsToDecimalSystem( const char \*str ){\
const char \*p = str;\
int sum = 0;\
int tmpNum = TransToNum( \*p++ ); // 暂时存储值,若IX或者XII等完成后才归零,重新开始存储值.\
while( \*p != '\\0' )\
{\
int curNum = TransToNum( \*p );\
int prevNum = TransToNum( \*(p-1) );\
// 从左往右顺序读入,如MIIX,读取II,则相继将值累加至tmpNum中.\
// 直到读到比I大的值才完成一次暂时存储过程,并存入sum中,\
// 若MXII,则一直累加,注意,对于这种情况,\
// 当读到一个更小的值的时候就重新开始存储过程,并存入sum中.\
if( curNum \< prevNum ){\
sum += tmpNum;\
tmpNum = curNum;\
}\
else if( curNum == prevNum ){\
tmpNum += curNum;\
}\
else if( curNum \> prevNum ){\
tmpNum = curNum - tmpNum;\
sum += tmpNum;\
tmpNum = 0;\
}\
\
p++;\
}\
sum += tmpNum;\
\
return sum;\
}\
int main(){\
char str[10];\
cin \>\> str;\
cout \<\< RomanNumeralsToDecimalSystem( str ) \<\< endl;\
}\
/\*\
XII\
12\
\
XXIX\
29\
\
XCIX\
99\
\
MCMXCVIII\
1998\
请按任意键继续. . .\
\*/