【Leetcode刷题篇】(四)罗马数字转整数

题目:

https://leetcode-cn.com/problems/roman-to-integer/description/

罗马数字包含以下七种字符: I, V, X, LCD 和 M

字符          数值
I             1
V             5
X             10
L             50
C             100
D             500
M             1000

      例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做  XXVII, 即为 XX + V + II 。

通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:

  • I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
  • X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。 
  • C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。

给定一个罗马数字,将其转换成整数。输入确保在 1 到 3999 的范围内。

示例:

示例 1:

输入: "III"
输出: 3

示例 2:

输入: "IV"
输出: 4

示例 3:

输入: "IX"
输出: 9

示例 4:

输入: "LVIII"
输出: 58
解释: L = 50, V= 5, III = 3.

示例 5:

输入: "MCMXCIV"
输出: 1994
解释: M = 1000, CM = 900, XC = 90, IV = 4.

分析:

      首先,罗马数字是一个字符串。且大部分的罗马数字转整数是有规律可循的,可以遍历整个字符串,直接用switch-case语句将对应的字符转为整数,然后再考虑特殊情况,即小号的字符出现在大号的字符前面的时候,常规做法多加了一些量进去,(例如IV代表4,但是按字面处理,却当做了6)应该将多加进去的数字减掉。怎么知道啥时候该减呢?用一个标记去处理,遍历是从高位开始的,若代表低位的罗马数字出现在了高位的前面,就说明此时为特殊情况。

解答:

class Solution {
public:
     int romanToInt(string s) {
     int value=0;
     int I_fag=0,V_fag=0,X_fag=0,L_fag=0,C_fag=0,D_fag=0,M_fag=0;
     int slen=s.size(); 
      for (auto c:s)
      {
              switch(c)
             {  
                case 'I' : 
                            value+=1; 
                            I_fag=1;
                            break;
                case 'V' :
                            value+=5;
                            V_fag=1;
                            if(I_fag==1 && V_fag==1)
                             {
                                value-=2;
                                I_fag=0;
                             }   
                             break;
                       
                case 'X' :
                            X_fag=1;
                            value+=10; 
                            if(I_fag==1 && X_fag==1)
                             {
                                value-=2;
                                I_fag=0;
                             }   
                             break;
                case 'L' :  
                            L_fag=1;
                            value+=50;
                            if(X_fag==1 && L_fag==1)
                             {
                                value-=20;
                                X_fag=0;
                             }   
                             break;
                case 'C' : 
                           C_fag=1;
                           value+=100;     
                           if(X_fag==1 && C_fag==1)
                             {
                                value-=20;
                                X_fag=0;
                             }   
                             break;                      
                case 'D' : 
                           D_fag=1;
                           value+=500;     
                           if(C_fag==1 && D_fag==1)
                             {
                                value-=200;
                                C_fag=0;
                             }   
                             break; 
                case 'M' : M_fag=1;
                           value+=1000;     
                           if(C_fag==1 && M_fag==1)
                             {
                                value-=200;
                                C_fag=0;
                             }   
                             break;  
                      
                default:                    break;                
            }       
      }
 
         return value; 
    }
};

 

基于SSM框架的智能家政保洁预约系统,是一个旨在提高家政保洁服务预约效率和管理水平的平台。该系统通过集成现代信息技术,为家政公司、家政服务人员和消费者提供了一个便捷的在线预约和管理系统。 系统的主要功能包括: 1. **用户管理**:允许消费者注册、登录,并管理他们的个人资料和预约历史。 2. **家政人员管理**:家政服务人员可以注册并更新自己的个人信息、服务类别和服务时间。 3. **服务预约**:消费者可以浏览不同的家政服务选项,选择合适的服务人员,并在线预约服务。 4. **订单管理**:系统支持订单的创建、跟踪和管理,包括订单的确认、完成和评价。 5. **评价系统**:消费者可以在家政服务完成后对服务进行评价,帮助提高服务质量和透明度。 6. **后台管理**:管理员可以管理用户、家政人员信息、服务类别、预约订单以及处理用户反馈。 系统采用Java语言开发,使用MySQL数据库进行数据存储,通过B/S架构实现用户与服务的在线交互。系统设计考虑了不同用户角色的需求,包括管理员、家政服务人员和普通用户,每个角色都有相应的权限和功能。此外,系统还采用了软件组件化、精化体系结构、分离逻辑和数据等方法,以便于未来的系统升级和维护。 智能家政保洁预约系统通过提供一个集中的平台,不仅方便了消费者的预约和管理,也为家政服务人员提供了一个展示和推广自己服务的机会。同时,系统的后台管理功能为家政公司提供了强大的数据支持和决策辅助,有助于提高服务质量和管理效率。该系统的设计与实现,标志着家政保洁服务向现代化和网络化的型,为管理决策和控制提供保障,是行业发展中的重要里程碑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值