整数转罗马数字罗马数字转整数
罗马数字包含以下七种字符: 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 的范围内。
示例 1:
输入: 3
输出: “III”
示例 2:
输入: 4
输出: “IV”
示例 3:
输入: 9
输出: “IX”
示例 4:
输入: 58
输出: “LVIII”
解释: L = 50, V = 5, III = 3.
示例 5:
输入: 1994
输出: “MCMXCIV”
解释: M = 1000, CM = 900, XC = 90, IV = 4.
1.Java
法一:贪心
int[] values = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
String[] symbols = {"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};public String intToRoman(int num) {StringBuilder sb = new StringBuilder();// Loop through each symbol, stopping if num becomes 0.for (int i = 0; i < values.length && num >= 0; i++) {// Repeat while the current symbol still fits into num.while (values[i] <= num) {num -= values[i];sb.append(symbols[i]);}}return sb.toString();
}
法二:硬编码数学
public String intToRoman(int num) {String[] thousands = {"", "M", "MM", "MMM"};String[] hundreds = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"}; String[] tens = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};String[] ones = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};return thousands[num / 1000] + hundreds[num % 1000 / 100] + tens[num % 100 / 10] + ones[num % 10];
}
2.C#
public class Solution {public string IntToRoman(int num) {int[] values = { 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 };string[] symbols = { "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" };string result = "";for (int i = 0; i < values.Length && num>0; i++){while (num >= values[i]){ num -= values[i];result += symbols[i]; }}return result;}
}
罗马数字转整数:
例如, 罗马数字 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.
1.Java
class Solution {public int romanToInt(String s) {char[] ch = s.toCharArray();int num = 0;for (int i = 0; i < ch.length - 1; i++) {if(ch[i] == 'I' && (ch[i + 1] == 'V' || ch[i + 1] == 'X'))num -= 2;if(ch[i] == 'X' && (ch[i + 1] == 'L' || ch[i + 1] == 'C'))num -= 20;if(ch[i] == 'C' && (ch[i + 1] == 'D' || ch[i + 1] == 'M'))num -= 200;}for (int i = 0; i < ch.length; i++) {switch (ch[i]) {case 'M': {num += 1000;continue;}case 'D': {num += 500;continue;}case 'C': {num += 100;continue;}case 'L': {num += 50;continue;}case 'X': {num += 10;continue;}case 'V': {num += 5;continue;}default: {num += 1;continue;}}}return num;}
}
2.C#
public class Solution {public int RomanToInt(string s) {s=s.Replace("IV","Y");s=s.Replace("IX","T");s=s.Replace("XL","U");s=s.Replace("XC","R");s=s.Replace("CD","O");s=s.Replace("CM","W");int sum=0;int i=0;for (i=0;i<s.Length;i++){switch (s[i]){case 'M':sum+=1000;break;case 'W':sum+=900;break;case 'D':sum+=500;break;case 'O':sum+=400;break; case 'C':sum+=100;break;case 'R':sum+=90;break;case 'L':sum+=50;break;case 'U':sum+=40;break;case 'X':sum+=10;break;case 'T':sum+=9;break;case 'V':sum+=5;break;case 'Y':sum+=4;break;case 'I':sum+=1;break;}}return sum;}
}
整数转罗马数字罗马数字转整数相关推荐
- python罗马数字转换,Python3.5实现的罗马数字转换成整数功能示例
本文实例讲述了Python3.5实现的罗马数字转换成整数功能.分享给大家供大家参考,具体如下: 问题概述: 给定一个罗马数字 ,将罗马数字转换成整数. 如罗马数字I,II,III,IV,V分别代表数字 ...
- 计蒜课挑战难题:罗马数字转换成整数
给定一个罗马数字s,( I<=s<=MMMCMXCIX)(即1到3999),将罗马数字转换成整数. 如罗马数字I,II,III,IV,V分别代表数字1, 2, 3, 4, 5. 格式: 第 ...
- 计蒜客挑战难题:整数转换成罗马数字
给定一个整数num,( 1<=num<=3999),将整数转换成罗马数字. 如1,2,3,4,5对应的罗马数字分别位I,II,III,IV,V等. 格式: 第一行输入一个整数,接下来输出对 ...
- php数字转换题目,PHP将整数数字转换为罗马数字实例分享
方法一:自定义函数 我们可以自己手动编写一个函数来实现此功能,这个函数可以将数字作为第一个参数,将其转换为罗马并返回. 注:大多数算法只能在1-4999的范围内工作,如果使用特大数,脚本将失败. 实现 ...
- c语言罗马数字换成整数,leetcode 13 罗马数字转整数 C语言
leetcode 13 罗马数字转整数 原题 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 ...
- re.findall函数和enumerate函数实现罗马数字转化为整数的方法比较
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L ...
- 整数转罗马数字 + 罗马数字转整数
题目1:整数转罗马数字 例如, 罗马数字 2 写做 II ,即为两个并列的 1.12 写做 XII ,即为 X + II . 27 写做 XXVII, 即为 XX + V + II . 通常情况下,罗 ...
- java实现整数1-3999转罗马数字
整数1-3999转罗马数字的一种解 我来用几张表格列举思路(仅仅考虑了1-3999奥) 罗马字母对应的整数(表1): 罗马数 I V X L C D M 整数 1 5 10 50 100 500 10 ...
- java怎么求两组整数的或集,确定整数是否在具有已知值集的两个整数(包括)之间的最快方法...
在C或C中是否有比 x >= start && x <= end 更快的方法来测试整数是否在两个整数之间? 更新:我的特定平台是iOS . 这是盒子模糊功能的一部分,它将像 ...
- 计算机组成原理整数乘法,计算机组成原理 - 定点整数的原码补码运算(待验证)...
计算机组成原理 - 定点整数的原码补码运算(待验证) 目录 〇.环境 对象 运算 定点整数原码.定点整数补码 移位.加.减.乘.除 原码定义: \(x=\begin{cases} x &0\l ...
最新文章
- 【转】Java字符串与字符集的基本概念
- iOS-Hello World
- mac:在当前文件夹打开terminal终端
- [机器学习笔记]Note15--大规模机器学习
- Keras学习手册(一)
- 横跨7个版本的OpenStack无感知热升级在360的落地与实践
- SpringCloud学习笔记015---Spring Boot集成RabbitMQ发送接收JSON
- Java集合框架--List、Set、Map
- HelloDjango 第 04 篇:Django 迁移、操作数据库
- nmon和nmon analyser使用方法
- vs2015 professional 密钥
- win10锁屏状态闹钟提示设置
- MATLAB中uigetfile函数使用方法
- 通过简单的C语言解决找钱问题
- 地图位置开发解析(一)
- office2007在ppt中插入文件对象(可以单击打开)
- 现代人遇到鸿蒙碎片,原来我是盖世奶爸-第126章 虚空之门是鸿蒙鼎碎片?
- 矩阵特征值的求解过程
- python- 按指定列值筛选数据
- python中使用tomorrow多线程时报错invalid syntax