罗马字符转十进制

    科技2022-09-02  117

    古罗马帝国开创了辉煌的人类文明,但他们的数字表示法的确有些繁琐,尤其在表示大数的时候,现在看起来简直不能忍受,所以在现代很少使用了。之所以这样,不是因为发明表示法的人的智力的问题,而是因为一个宗教的原因,当时的宗教禁止在数字中出现 0 的概念!罗马数字的表示主要依赖以下几个基本符号,如图 8 所示。1000 以内的数字的表示法为:单个符号重复多少次, 就表示多少倍。最多重复 3 次。比如:CCC 表示 300 XX 表示 20,但 150 并不用 LLL 表示,这个规则仅适用于 I X C M。如果相邻级别的大单位在右,小单位在左,表示大单位中扣除小单位。比如:IX 表示 9,IV 表示 4,XL 表示 40 更多的示例参见图 9。由用户输入一个罗马数字串(罗马数字大小不超过 999),程序输出对应的十进制表示。(注:如 LXXX 为 80,XCIII 为 93,DCCII 为702)

    代码:

    #include <stdio.h> #include <stdlib.h>

    /* run this program using the console pauser or add your own getch, system("pause") or input loop */ int ToNum(char ch){     //判断单个字符      switch(ch){         case 'I':{             return 1;             break;         }             case 'V':{             return 5;             break;         }             case 'X':{             return 10;             break;         }             case 'L':{             return 50;             break;         }             case 'C':{             return 100;             break;         }             case 'D':{             return 500;             break;         }             case 'M':{             return 1000;             break;         }     } } int main(int argc, char *argv[]) {     printf("输入需要解析的罗马字符:\n");     char input[256]={0};     gets(input);     int temp=0;     int sum=0;     int i=0;     //向后看一个      while(input[i+1]&&input[i]){         //连续字符不用管,连续就加就完事了          if(input[i]==input[i+1]){             sum+=ToNum(input[i]);             i++;         }         //不连续字符比大小,左大右小直接加,右大左小需要减(i+=2)         if(ToNum(input[i])<ToNum(input[i+1])){             sum+=ToNum(input[i+1])-ToNum(input[i]);             i+=2;         }          else if(ToNum(input[i])>ToNum(input[i+1])){             sum+=ToNum(input[i]);             i++;         }     }     //可能存在本身存在,但是后一个字符不存在的情况     if(input[i]&&!input[i+1]){         sum+=ToNum(input[i]);     }      printf("转换为十进制是:\n%d",sum);     return 0; }

     

     

    Processed: 0.008, SQL: 9