力扣刷题之旅——13. 罗马数字转整数

目录

I 理解题目需求

一、罗马数字的组合规律

II 设计程序(参考:断然Juvenile)

III 代码解析


      按照简单题的顺序,选择了第13题,一看题目我???,什么东西,怎么看懂一个罗马数字还需要运算。按照遇事不决先刷评论区的习惯就看到了下图:

       这老哥是懂罗马的。


       但是题目我们还是需要阅读一遍的:

题目还是比较长的,主要解释了一遍怎么看懂罗马数字以及他的组合规则是什么。


I 理解题目需求

1.设计一个程序,这个程序可以将罗马数字转换成整数。

2.理解罗马数字的组合规则。

3.按照所给定的代码模版完成题目。

一、罗马数字的组合规律

       按照题目所给出的资料,我们可以得出:

       1.罗马数字是通过'I', 'V', 'X', 'L', 'C', 'D', 'M'这七种字符排列组合来形成新的数值的。

       2.小的字符在大的字符的边,那么这个数值就是由大的字符去小的字符而形成的新的数值。

       3.小的字符在大的字符的边,那么这个数值就是由大的字符上小的字符而形成的新的数值。

下面是本次题目的模版:

int romanToInt(char* s) {
    
}

   int romanToInt(char* s) 是一个函数声明,它表示一个函数 romanToInt,该函数接受一个字符指针 s(通常指向一个以 null 结尾的字符串)作为参数,并返回一个整数(int)。


II 设计程序(参考:断然Juvenile

int romanToInt(char * s){
    int result=0,roman=0,temp=0;
    while (*s){
        switch (*s){
            case 'I':temp =1;break;
            case 'V':temp =5;break;
            case 'X':temp =10;break;
            case 'L':temp =50;break;
            case 'C':temp =100;break;
            case 'D':temp =500;break;
            case 'M':temp =1000;
        }

        if(temp>roman)
          {
            result = result + (temp - roman) - roman;

           }
        else
           {
            result = result + temp;
            }
        roman = temp;
        *s++;
    }
    return result;
}

III 代码解析

        首先,函数片段的假设是 tempresult 和 roman 是已经在函数外部定义好的整数变量。

1.循环结构

while (*s) {  
    ...  
    *s++;  
}

        这个 while 循环会持续执行,直到字符串 s 的当前字符为 null 字符(即字符串的结尾)。在每次循环的末尾,指针 s 递增,指向下一个字符。

2.switch 语句

switch (*s) {  
    ...  
}

        switch语句根据当前字符*s的值设置temp的值。这里temp 变量被用来存储当前罗马数字字符对应的整数值。

3.核心逻辑:       

if(temp > roman) {  
    result = result + (temp - roman) - roman;  
} else {  
    result = result + temp;  
}  
roman = temp;

        这里的逻辑是处理罗马数字中特殊的减法规则(如 IV 表示 4,而不是 5)。

4.变量初始化
        需要注意的是,此代码片段没有显示 tempresult 和 roman 的初始化。在实际的函数中,你需要确保这些变量在使用前被正确初始化。通常,result 应该初始化为 0。而 roman 可以初始化为一个不可能的值(如 0 或一个比任何罗马数字都小的值),以确保第一次比较时能够正确处理。

5.返回值

return result;

        在循环结束后,函数返回转换后的整数 result

        

  • 16
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值