罗马字符转十进制

该代码实现了一个程序,将用户输入的罗马数字转换成相应的十进制数值。通过判断罗马数字的基本符号及其组合规则,如连续字符的累加和大小比较规则,程序能够正确解析并计算出十进制表示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

古罗马帝国开创了辉煌的人类文明,但他们的数字表示法的确有些繁琐,尤其在表示大数的时候,现在看起来简直不能忍受,所以在现代很少使用了。之所以这样,不是因为发明表示法的人的智力的问题,而是因为一个宗教的原因,当时的宗教禁止在数字中出现 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;
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值