本题目来自于力扣

题目

罗马数字包含以下七种字符: I, V, X, L,C,D 和 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 的范围内。

来源:力扣(LeetCode)

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

思路

初始pre为0,然后遍历字符串,将每个字符对应的值和pre比较,小则做减法,否则正常加,将pre刷新。

解决代码

#include

#include

int romanToInt(char * s);

int main(){

char *roman = "MDCCCLXXXIV";

int number = romanToInt(roman);

printf("%d\n",number);

return 0;

}

int romanToInt(char * s)

{

int length = strlen(s);

int number = 0;

int pre = 0;

for(int i = length-1;i >= 0;i--)

{

//如果pre的数比当前数字大,那么就减,否则则加

if( *(s+i) == 'I' )

{

if( i+1 1 )

{

number += -1;

}else

{

number += 1;

}

pre = 1;

}

else if ( *(s+i) == 'X' )

{

if( i+1 10 )

{

number += -10;

}else

{

number += 10;

}

pre = 10;

}

else if ( *(s+i) == 'C' )

{

if( i+1 100 )

{

number += -100;

}else

{

number += 100;

}

pre = 100;

}

else if ( *(s+i) == 'V' )

{

number += 5;

pre = 5;

}

else if ( *(s+i) == 'L' )

{

number += 50;

pre = 50;

}

else if ( *(s+i) == 'D' )

{

number += 500;

pre = 500;

}

else if ( *(s+i) == 'M' )

{

number += 1000;

pre = 1000;

}

}

return number;

}

c语言中罗马字母数字,罗马数字转整数C语言实现相关推荐

  1. c语言字母转换数字代码,实现c语言中字符串和数字的相互转换的代码

    实现c语言中字符串和数字的相互转换的代码 引导语:代码就是程序员用开发工具所支持的语言写出来的源文件,是一组由字符.符号或信号码元以离散形式表示信息的明确的'规则体系.以下是百分网小编分享给大家的实现 ...

  2. c语言0x前缀的作用,C语言中的十六进制数字为什么以前缀0x开头

    C语言中最直观的数字表示方式自然是二进制.不过这样常常会让数字看起来"过长",在C语言程序开发中,为了程序员阅读代码的方便,需要逐位操作变量时,常常使用十六进制,相对而言更加直观. ...

  3. c语言中后缀字母如 d h b l i,10 C语言中常量的表示.ppt

    10 C语言中常量的表示 第9单元 C语言中常量的表示 数据可以用变量存放,也可以用常量形式表示.常量是程序不可修改的固定值,可以分字面常量和符号常量. 字面常数就是直接书写出来的常数,通常不被单独存 ...

  4. python电话号码对应的字符组合_Python3 在字符串中提取字母+数字组合微信账号、电话等 - pytorch中文网...

    今天处理数据要提取字符串中的微信,字符串中包含中文英文Emoji,标点符号等. python 提取字符串中的电话 提取电话相对简单,多个电话也可以提取 import re desstr = " ...

  5. c语言中函数名可不可以由用户命名,C语言中变量名及函数名的命名规则与驼峰命名法...

    在程序设计中,变量名.函数名.数组名等统称为标识 符.简单地说,标识符就是一个名字.除库函数的函数名由系统定义外,其余都由用户自定义.C语言规定,标识符只能由字母(a-z,A-Z).数字 (0-9). ...

  6. c语言中不能编译,为什么`int;`可以在C语言中很好地编译,而在C ++中却不能?

    考虑以下程序(请参见此处的现场演示). #include int main(void) { int ;  // Missing variable name puts("Surprise&qu ...

  7. c语言中的字母占位符,C语言专题-基本数据类和占位符

    C语言中常用的几种基本数据类型有 基本数据类型的长度 short =2 unsigned short=2 char =1 unsigned char=1 int =4 unsigned int=4 l ...

  8. c语言中%加字母是啥意思,%C是什么意思? C语言中%c,%s分别代表什么意思?

    导航:网站首页 > %C是什么意思? C语言中%c,%s分别代表什么意思? %C是什么意思? C语言中%c,%s分别代表什么意思? 相关问题: 匿名网友: %c单个字符输出的意思. %s是输出字 ...

  9. c语言中一个字母-97 1,C语言学习(1)

    一.C语言基础 1. 学习方法 多看+多敲+多思考总结 2. C语言历史 机器码: 01二进制去写代码,困难很大 10+11运算 + ---> 01001 汇编语言:用助记符替换掉机器码中的序列 ...

  10. c语言 统计数量用count_c语言中统计重复数字次数 c语言问题 统计不同数字的个数...

    请问c语言当中,如何统计数字各自出现的次数 请教一个问题: 在c语言当中,用数组的方法,统计输入的一串数字,统计实现代码: #include int main() { int num = 0, i = ...

最新文章

  1. 她92年的,27岁,当上浙大博导。
  2. 教你如何运用python实现学生信息管理系统
  3. C++STL中的unique函数解析
  4. 安装报错_RG Magic Bullet安装报错修复方法
  5. C#进阶系列——WebApi 身份认证解决方案:Basic基础认证
  6. 字符串操作与正则表达式
  7. LeetCode 147. Insertion Sort List 链表插入排序 C++/Java
  8. android studio 使用SVN 锁定文件,防止别人修改(基于Android studio 1.4 )
  9. 【spring源码分析】IOC容器初始化(二)
  10. binaryoperator java_BinaryOperatorT接口的用法示例
  11. WireShark 查看UDP码流的丢包率
  12. python django项目实例_【Django】项目实例
  13. who 、w 查看当前登录用户
  14. 二叉树的创建及其相关操作
  15. 分区助手服务器,分区助手专业版
  16. 英语语法3-现在进行时
  17. 宝宝去了幼儿园不爱说话怎么办?
  18. 小鹤双拼提速方法个人经验-by老随风
  19. Office 顿号怎么输
  20. 全国计算机等级考试桑葚,高负荷学习眼睛干涩疲劳?省考试院推荐6大营养果蔬护眼有方!附食谱...

热门文章

  1. 取消u盘写保护 u盘量产教程(无数尝试后的终极解决办法)
  2. msvcr71.dll丢失的解决方法,如何快速进行丢失修复?
  3. 将pdf文件缩小的最快速方法,pdf文件变小的方法
  4. 计算机一级添加通讯录好友,电脑企业微信从微信好友中添加成员功能如何使用...
  5. python朋友圈点赞统计_微信公众号所有历史文章的标题/点赞数/阅读数统计
  6. JavaScript函数创建表格
  7. [网易博客]驱动力读后感
  8. 大学生就业观念的调查与分析
  9. SEO与SEM的区别和联系
  10. 厉害了!小学生用大数据研究苏轼,结论出人意料