用c语言将罗马数字转化为十进制数字
答案:2 悬赏:40
解决时间 2021-01-10 11:50
- 提问者网友:我没有何以琛的痴心不悔
- 2021-01-09 12:56
用c语言将罗马数字转化为十进制数字
最佳答案
- 二级知识专家网友:傲气稳了全场
- 2021-01-09 13:15
罗马数字只能用字符串来表示,用字符串比较函数来判断就好了
#include
#include
int main()
{
char str[100];
printf("input a Roman numeral: " );
scanf("%s", str );
if ( strcmp(str,"VI")==0 )
printf("6\n");
else if ( strcmp(str, "X")==0 )
printf( "10\n");
else
{
printf("按格式,自己补充代码\n" );
}
return 0;
}追问要转换1到12的罗马数字追答按上面的代码格式,你自己补充其他的数字不就可以了吗?
自己动手练习一下啊。
如果想灵活表示相应的数值,需要写个算法了。追问好的追答自己练习一下,有问题再交流
#include
#include
int main()
{
char str[100];
printf("input a Roman numeral: " );
scanf("%s", str );
if ( strcmp(str,"VI")==0 )
printf("6\n");
else if ( strcmp(str, "X")==0 )
printf( "10\n");
else
{
printf("按格式,自己补充代码\n" );
}
return 0;
}追问要转换1到12的罗马数字追答按上面的代码格式,你自己补充其他的数字不就可以了吗?
自己动手练习一下啊。
如果想灵活表示相应的数值,需要写个算法了。追问好的追答自己练习一下,有问题再交流
全部回答
- 1楼网友:思契十里
- 2021-01-09 13:26
#include
int getUnit(char ch){
int unit=0;
switch(ch){
case 'I': unit = 1; break;
case 'V': unit = 5; break;
case 'X': unit = 10; break;
default: unit = -1;
}
return unit;
}
int getValue(char *s)
{
char *p = s;
int val = 0;
int unit;
while(*p && (*p != ' ')){
unit = getUnit( *p );
if (unit==-1)
{
printf("输入有误! ");
return -1;
}
if((*(p+1) == '') || (*(p+1) == ' ') || ( getUnit( *(p+1) ) <= unit))
{
val += unit;
}
else
{
val -= unit;
}
p++;
}
return val;
}
int main()
{
char romanNum[10];
int digit;
printf("请输入罗马数字(输入q或Q退出程序) ");
while(1)
{
gets(romanNum);
// 输入q或Q退出
if(romanNum[0]=='q' || romanNum[0]=='Q')
break;
digit = getValue(romanNum);
if (digit!=-1)
{
printf("%d ", digit);
}
else
{
printf("请重新输入一个罗马数字(输入q或Q退出程序) ");
}
}
return 0;
}
程序运行结果如下:
int getUnit(char ch){
int unit=0;
switch(ch){
case 'I': unit = 1; break;
case 'V': unit = 5; break;
case 'X': unit = 10; break;
default: unit = -1;
}
return unit;
}
int getValue(char *s)
{
char *p = s;
int val = 0;
int unit;
while(*p && (*p != ' ')){
unit = getUnit( *p );
if (unit==-1)
{
printf("输入有误! ");
return -1;
}
if((*(p+1) == '') || (*(p+1) == ' ') || ( getUnit( *(p+1) ) <= unit))
{
val += unit;
}
else
{
val -= unit;
}
p++;
}
return val;
}
int main()
{
char romanNum[10];
int digit;
printf("请输入罗马数字(输入q或Q退出程序) ");
while(1)
{
gets(romanNum);
// 输入q或Q退出
if(romanNum[0]=='q' || romanNum[0]=='Q')
break;
digit = getValue(romanNum);
if (digit!=-1)
{
printf("%d ", digit);
}
else
{
printf("请重新输入一个罗马数字(输入q或Q退出程序) ");
}
}
return 0;
}
程序运行结果如下:
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯