罗马数字的表示主要依赖以下几个基本符号:
I 1 V 5 X 10 L 50 C 100 D 500 M 1000
这里,我们只介绍一下1000以内的数字的表示法。
单个符号重复多少次,就表示多少倍。最多重复3次。比如:CCC表示300 XX表示20,但150并不用LLL表示,这个规则仅适用于I X C M。
如果相邻级别的大单位在右,小单位在左,表示大单位中扣除小单位。比如:IX表示9 IV表示4 XL表示40
更多的示例参见下表,你找到规律了吗
本题目的要求是:请编写程序,由用户输入若干个罗马数字串,程序输出对应的十进制表示。
输入格式是:第一行是整数n,表示接下来有n个罗马数字(n<100)。以后每行一个罗马数字。罗马数字大小不超过999。
要求程序输出n行,就是罗马数字对应的十进制数据。
例如,用户输入:
3 LXXX XCIII DCCII则程序应该输出: 80 93 702
#include#include int LuoMa(char *s){ int num = 0; int i=0; int sum = strlen(s); for(i=0;i 0&&s[i-1]=='I') num+=5-1-1;//因为之前已经加过1啦 else num+=5; } else if(s[i]=='X'){ if(i>0&&s[i-1]=='I') num+=10-1-1; else if(i>0&&s[i-1]=='V') num+=10-5-5; else num+=10; } else if(s[i]=='L'){ if(i>0&&s[i-1]=='I') num+=50-1-1; else if(i>0&&s[i-1]=='V') num+=50-5-5; else if(i>0&&s[i-1]=='X') num+=50-10-10; else num+=50; } else if(s[i]=='C'){ if(i>0&&s[i-1]=='I') num+=100-1-1; else if(i>0&&s[i-1]=='V') num+=100-5-5; else if(i>0&&s[i-1]=='X') num+=100-10-10; else if(i>0&&s[i-1]=='L') num+=100-50-50; else num+=100; } else if(s[i]=='D'){ if(i>0&&s[i-1]=='I') num+=500-1-1; else if(i>0&&s[i-1]=='V') num+=500-5-5; else if(i>0&&s[i-1]=='X') num+=500-10-10; else if(i>0&&s[i-1]=='L') num+=500-50-50; else if(i>0&&s[i-1]=='C') num+=500-100-100; else num+=500; } else if(s[i]=='M'){ if(i>0&&s[i-1]=='I') num+=1000-1-1; else if(i>0&&s[i-1]=='V') num+=1000-5-5; else if(i>0&&s[i-1]=='X') num+=1000-10-10; else if(i>0&&s[i-1]=='L') num+=1000-50-50; else if(i>0&&s[i-1]=='C') num+=1000-100-100; else if(i>0&&s[i-1]=='C') num+=1000-100-100; else if(i>0&&s[i-1]=='D') num+=1000-500-500; else num+=500; } } return num; } int main(){ int n; char s[100]; int sum; int i; int length; int j=0; scanf("%d",&n); for(i=0;i
另一种解法,利用数组#include#include int main(){ int i,j; int n; char s[100]; int num[7]={1,5,10,50,100,500,1000}; int line[7];//记录输入罗马符的下标 //char LuoMa[]="IVXLCDM"; char LuoMa[7]={'I','V','X','L','C','D','M'}; int LuoMaNum=0; int k=0,sum,g; scanf("%d",&n); for(i=0;i line[g+1]){ LuoMaNum+=num[line[g]]; g++; } else if(line[g] 欢迎分享,转载请注明来源:内存溢出
评论列表(0条)