leetcode 每日一题 13. Roman to Integer


 将罗马数字转换成int,首先要知道罗马数字的规则,有一篇文章写得很好,我看了之后理解了···所以编了程序1a了

 原文在此: http://www.ituring.com.cn/article/179820?utm_source=tuicool

基本字符:   I、V、X、L、C、D、M
相应的阿拉伯数字表示为:
1.5、10、50、100、500、1000
(1)相同的数字连写,所表示的数等于这些数字相加得到的数,如:Ⅲ = 3;
(2)小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数, 如:Ⅷ = 8;Ⅻ = 12;
(3)小的数字,(限于Ⅰ、X 和C)在大的数字的左边,所表示的数等于大数减小数得到的数,如:Ⅳ= 4;Ⅸ= 9;

思路如下
从左边第一个数字开始,依次加,因为有(3)的情况的存在, 加过以后判断,要是存在(3)的情况,就减去前一个(i-1)*2,因为本来应该减去前面这个小的数, 但是上次一循环还加了一次,于是这次就减去2次。

代码如下,要注意switch的写法:

class Solution {
public:
    int chartoval(char c){
        int val;
        switch(c){
            case'I': val=1;break;
            case'V': val=5;break;
            case'X': val=10;break;
            case'L': val=50;break;
            case'C': val=100;break;
            case'D': val=500;break;
            case'M': val=1000;break;
        }
        return val;
    }
    int romanToInt(string s) {
        int sum=chartoval(s[0]);
        for(int i=1;i<s.length();i++){
            if(chartoval(s[i])<=chartoval(s[i-1])){
                sum+=chartoval(s[i]);
            }
            else{
                sum+=chartoval(s[i]);
                sum-=2*chartoval(s[i-1]);
            }
            
        }
        return sum;
    }

};



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值