IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> leecode-C语言实现-13. 罗马数字转整数 -> 正文阅读

[数据结构与算法]leecode-C语言实现-13. 罗马数字转整数

一、题目
在这里插入图片描述
在这里插入图片描述
二、解题思路

我们遍历题目给出的字符串时,大部分情况下都是从大到小的顺序:M > D > C > L > X > V > I,但也会有一些特殊情况,所以我们须分两种情况进行讨论:
(1)字符为C、X、I 时,在不超出字符串范围的情况下,需多判断一位字符,因为它们组成CD,CM,XL,XC, IV,IX这几个特殊的字符串,是表示较小的数在表示较大的数的左边。
(2)M , D , L , V ,这几个数可以转换成相应的数字,不用做特殊处理。

注意点:刚开始我用宏定义代替数字的形式,为了后续代码修改方便和看着简洁,发现第一次运行花了12ms,初步判断是编译时宏定义需要拼接到代码中,这可能消耗一些时间,后面我去掉宏定义直接用数字的方式运行代码花了0ms,这里做一下简记,也知会一下各位读者。

三、VS-2022-测试代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define STRLEN 10

int romanToInt(char* s);

void main() {
    size_t i;
    char StrArr[][STRLEN] = {"III" ,"IV" ,"IX" ,"LVIII"};
    int StrArrSize = sizeof(StrArr) / (sizeof(char) * STRLEN);
    printf("StrArrSize : %d\n", StrArrSize);
    for (i = 0; i < StrArrSize; i++)
    {
        printf("str : %s, res : %d\n", StrArr[i], romanToInt(StrArr[i]));
        printf("+++++++++++++++++++++\n");
    }
}

int romanToInt(char* s) {
    int i = 0;
    int res = 0;
    int s_size = strlen(s);

    while (s[i] != '\0')
    {
        printf("s[%d] : %c\n",i,s[i]);
        switch (s[i])
        {
        case 'M':
            res = res + 1000;
            break;
        case 'D':
            res = res + 500;
            break;
        case 'C':
            //CD , CM
            if ((i + 1 < s_size) && (s[i + 1] == 'M'))
            {
                i++;
                res = res + 900;
            }
            else  if ((i + 1 < s_size) && (s[i + 1] == 'D'))
            {
                i++;
                res = res + 400;
            }
            else
            {
                res = res + 100;
            }
            break;
        case 'L':
            res = res + 50;
            break;
        case 'X':
            //XL , XC
            if ((i + 1 < s_size) && (s[i + 1] == 'L'))
            {
                i++;
                res = res + 40;
            }
            else  if ((i + 1 < s_size) && (s[i + 1] == 'C'))
            {
                i++;
                res = res + 90;
            }
            else
            {
                res = res + 10;
            }
            break;
        case 'V':
            res = res + 5;
            break;
        case 'I':
            //IX , IV
            if ((i + 1 < s_size) && (s[i + 1] == 'V'))
            {
                i++;
                res = res + 4;
            }
            else  if ((i + 1 < s_size) && (s[i + 1] == 'X'))
            {
                i++;
                res = res + 9;
            }
            else
            {
                res = res + 1;
            }
            break;
        default:
            break;
        }
        //printf("res : %d\n",res);
        i++;
    }
    return res;
}

四、VS-2022-运行截图
在这里插入图片描述
五、leecode提交代码

int romanToInt(char* s) {
    int i = 0;
    int res = 0;
    int s_size = strlen(s);

    while (s[i] != '\0')
    {
        //printf("s[%d] : %c\n",i,s[i]);
        switch (s[i])
        {
        case 'M':
            res = res + 1000;
            break;
        case 'D':
            res = res + 500;
            break;
        case 'C':
            //CD , CM
            if ((i + 1 < s_size) && (s[i + 1] == 'M'))
            {
                i++;
                res = res + 900;
            }
            else  if ((i + 1 < s_size) && (s[i + 1] == 'D'))
            {
                i++;
                res = res + 400;
            }
            else
            {
                res = res + 100;
            }
            break;
        case 'L':
            res = res + 50;
            break;
        case 'X':
            //XL , XC
            if ((i + 1 < s_size) && (s[i + 1] == 'L'))
            {
                i++;
                res = res + 40;
            }
            else  if ((i + 1 < s_size) && (s[i + 1] == 'C'))
            {
                i++;
                res = res + 90;
            }
            else
            {
                res = res + 10;
            }
            break;
        case 'V':
            res = res + 5;
            break;
        case 'I':
            //IX , IV
            if ((i + 1 < s_size) && (s[i + 1] == 'V'))
            {
                i++;
                res = res + 4;
            }
            else  if ((i + 1 < s_size) && (s[i + 1] == 'X'))
            {
                i++;
                res = res + 9;
            }
            else
            {
                res = res + 1;
            }
            break;
        default:
            break;
        }
        //printf("res : %d\n",res);
        i++;
    }
    return res;
}

六、leecode运行结果
在这里插入图片描述

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-04-04 12:36:03  更:2022-04-04 12:36:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 10:03:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码