题目

1

Given an integer, convert it to a roman numeral.

Input is guaranteed to be within the range from 1 to 3999.

2

Given a roman numeral, convert it to an integer.

Input is guaranteed to be within the range from 1 to 3999.

这两道题就是要我们在1~3999(为什么小于4000呢?)的范围内将用阿拉伯数字表示的整数与用罗马数字表示的数相互转换。

罗马数字

在将这两者转化之前,我们需要先了解一下罗马数字及其规则。

(罗马数字的起源,变化以及发展跟我们的主题无关,想要知道的自己上网查找。)

罗马数字一共有7个基本符号,分别为:I(1)、V(5)、X(10)、L(50)、C(100)、D(500)和M(1000),括号内的值表示其大小。注意:罗马数字并没有表示0的符号。

规则

1. 相同的数字连写、所表示的数等于这些数字相加得到的数。 如 III表示 3,XX表示20。但是,一般情况下,连写不能超过3次,V、L和D不能连写。

2. 小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数。 如 VI 表示 6。

3. 小的数字在大的数字的左边,所表示的数等于大数减小数得到的数。 如 IX 表示 9, CD表示400。但是,这个仅限于I在V或者X的左边, X在L或C的左边,C在D或M的左边。例如99表示成 XCIX,不能表示为 IC。而且左减数字只能为一位。例如8表示成VII,不能表示成IIX。

4. 在一个数的上面画一条横线、表示这个数扩大 1000 倍。(由于在这两道题目中,无法表示出来,因此最大只能表示3999,要表示5000就只能在V上面加上横线)。

个人理解

看了上面的规则后,其实有些人对于罗马数字的表示还可能云里雾里的。如果你把IV(4), IX(9), XL(40),XC(90),CD(400),CM(900)看成一个数字。在将一个数表示成罗马数字的时候,按照从左到右的写法,从大到小选择罗马数字符号就可以了。

例如,748 =》 DCC(700) + XL(40) + VIII =》 DCCXLVIII

999 =》 CM(900) + XC(90) + IX =》 CMXCIX

代码

在int->roman中,我用一个表存储十进制数上每个位上的数字对应的罗马数字。在转换的时候,只要求解出每个位置上的数字,再查表后将得到的字符连接起来就可以得出结果。

在roman->int中,用一个int类型的变量表示罗马数字代表的值,若使用查表的方法需要先对字符串进行分割,有点麻烦,直接利用规则2和规则3,若字符str[i]表示的值小于字符str[i+1]表示的值,就减去str[i]的值,否则加上str[i+1]的值。

#include<cmath>
class Solution {
public:string intToRoman(int num) {// table表存储十进制数上每个位所表示的罗马数字// 例如, 365 中 百位上的 3 大小为 table[2][3] = CCCstring table[4][10] = {{"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"},{"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"},{"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"},{"", "M", "MM", "MMM", "", "", "", "", "", ""}};string roman_numeral = "";roman_numeral += table[3][num / 1000];num %= 1000;roman_numeral += table[2][num / 100];num %= 100;roman_numeral += table[1][num / 10];num %= 10;roman_numeral += table[0][num];return roman_numeral;}
};
#include <map>
class Solution {
public:int romanToInt(string s) {map<char, int> mymap = {{'I', 1}, {'V', 5}, {'X', 10}, {'L', 50}, {'C', 100}, {'D', 500}, {'M', 1000}};int result = 0, i = 0, temp;for (i = 0; i < s.length() - 1; i++) {temp = mymap[s[i]];if (temp < mymap[s[i + 1]]) {result -= temp;} else {result += temp;}}result += mymap[s[i]];return result;}
};

罗马数字与阿拉伯数字的相互转化相关推荐

  1. 罗马数字和阿拉伯数字互转(源码)

    罗马数字和阿拉伯数字互转(源码) 将下面源码全部复制下来直接粘贴到html页面试一下,代码还有许多需要改进的地方,请各位大神多多指点,谢谢! <!DOCTYPE html> <htm ...

  2. 罗马数字与阿拉伯数字的相互转换

      最近遇到一道非常有趣的题目,题目大意如下:有一个富翁在银河系里做生意,而银河系使用的是罗马数字,所以他需要一个精明能干的助手,帮助他完成罗马数字与阿拉伯数字的相互转换,题目在这个背景下衍生出交易场 ...

  3. python罗马数字转换阿拉伯数字_20202427-张启辰《Python3初学:罗马数字转阿拉伯数字》...

    20202427-张启辰<Python3初学:罗马数字转阿拉伯数字> 1.规则 罗马数字是古罗马使用的一种记数系统,在阿拉伯数字传入之前使用较为普遍,目前大家可能在钟表.日历.文章的排序 ...

  4. java输出罗马数字_Java实现的求解经典罗马数字和阿拉伯数字相互转换问题示例...

    本文实例讲述了Java实现的求解经典罗马数字和阿拉伯数字相互转换问题.分享给大家供大家参考,具体如下: 古罗马帝国开创了辉煌的人类文明,但他们的数字表示法的确有些繁琐,尤其在表示大数的时候,现在看起来 ...

  5. 罗马数字转阿拉伯数字两种实现

    记数方法 古罗马数字基本符号 基本字符 I V X L C D M 相应的阿拉伯数字表示为 1 5 10 50 100 500 1000 相同的数字连写,所表示的数等于这些数字相加得到的数,如:Ⅲ=3 ...

  6. 罗马数字与阿拉伯数字互转

    来源于 LeetCode Roman to Integer 描述: Given a roman numeral, convert it to an integer. Input is guarante ...

  7. python判断输入的是否为数字_python怎么判断是否为数字 将罗马数字转为阿拉伯数字,用python解...

    将阿拉伯数字转为罗马数字,用python解 class Solution(object): def intToRoman(self, num): """ :type nu ...

  8. 经典题:罗马数字和阿拉伯数字的相互转换

    package Linkedin;public class RomeToArabic {public static void main(String[] args) {String s = " ...

  9. 罗马数字转换阿拉伯数字(Java版,考虑较为全面)

    一. 前言 朋友的作业,本想在网上找个现成的改改就行啦.可是一番google.baidu之后,找到的要么不是Java版本的,要么就是考虑的不够全面.遂,笔者自己写了个,如有考虑不全面的地方,望大家能够 ...

最新文章

  1. 《20170914-构建之法:现代软件工程-阅读笔记》
  2. linux脚本做分数计算,shell脚本,计算学生分数的题目。
  3. 活动目录环境下 临时让End user提升权限安装应用软件
  4. UISeatchBar
  5. VC中的#pragma指令的用法
  6. php获取网页输出,PHP 利用AJAX获取网页并输出的实现代码(Zjmainstay)_PHP教程
  7. 机器学习算法之集成学习
  8. c语言去掉数组中重复的,C语言删除无序整型数组中的重复元素及时间复杂度
  9. ++库 照片风格转换风格_seaborn库:整体风格设置
  10. 【Flink】双亲委派模型与Flink的类加载策略 child-first parent-first
  11. 带你十分钟了解BFC(渡一教育笔记)
  12. Oracle中级篇-物化视图
  13. 水清冷冷:PS 2021 (Adobe Photoshop 2021) 安装教程和学习方法(附工具)
  14. 16本版式设计书籍推荐(附PDF链接)设计从业人员必备
  15. Quartz在QRTZ_JOB_DETAILS表中存储了什么
  16. 只利用 phpstudy 如何运行PHP文件 超详细教程
  17. Learn Git Branching 小游戏总结
  18. Python爬虫是什么?
  19. github python100天_GitHub - ychgithub/Python-100-Days: Python - 100天从新手到大师
  20. (最新最详细)安装ubuntu18.04

热门文章

  1. 写不好 SQL? 送你一个大招
  2. Java 实现调度算法 包括 FCFS(FIFO)、优先权排队、循环排队、加权公平排队(WFQ)
  3. Oracle等待事件(一)—— latch cache buffers chains 分析与优化思路
  4. 腾讯手机管家ROOT功能分析
  5. 头条系 巨量算数 _signature
  6. 一加5t刷android p,一加5T刷机包
  7. 阿里云SLB最佳实践
  8. 百度网盘被和谐文件一键清理不能下载违规信息空间删除
  9. 项目经理和团队如何产生距离美?
  10. 二、Cent OS 7 下MySQL安装(安装版)