罗马数字与阿拉伯数字互转
來(lái)源于 LeetCode
Roman to Integer
描述: Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
(給定一個(gè)羅馬數(shù)字,將其轉(zhuǎn)換為整數(shù)。輸入保證在1到3999的范圍內(nèi)。)
Integer to Roman
描述:Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.(給定一個(gè)整數(shù),將其轉(zhuǎn)換為羅馬數(shù)字。
輸入保證在1到3999的范圍內(nèi)。)
羅馬數(shù)字介紹
羅馬數(shù)字是歐洲在阿拉伯?dāng)?shù)字(實(shí)際上是印度數(shù)字)傳入之前使用的一種數(shù)碼,現(xiàn)在應(yīng)用較少。它的產(chǎn)生晚于中國(guó)甲骨文中的數(shù)碼,更晚于埃及人的十進(jìn)位數(shù)字。但是,它的產(chǎn)生標(biāo)志著一種古代文明的進(jìn)步。
記數(shù)方法
| I | 1 |
| V | 5 |
| X | 10 |
| L | 50 |
| C | 100 |
| D | 500 |
| M | 1000 |
組數(shù)規(guī)則
有兩條須注意掌握:
對(duì)照舉例
個(gè)位數(shù)舉例
Ⅰ-1、Ⅱ-2、Ⅲ-3、Ⅳ-4、Ⅴ-5、Ⅵ-6、Ⅶ-7、Ⅷ-8、Ⅸ-9
十位數(shù)舉例
Ⅹ-10、Ⅺ-11、Ⅻ-12、XIII-13、XIV-14、XV-15、XVI-16、XVII-17、XVIII-18、XIX-19、XX-20、XXI-21、XXII-22、XXIX-29、XXX-30、XXXIV-34、XXXV-35、XXXIX-39、XL-40、L-50、LI-51、LV-55、LX-60、LXV-65、LXXX-80、XC-90、XCIII-93、XCV-95、XCVIII-98、XCIX-99
百位數(shù)舉例
C-100、CC-200、CCC-300、CD-400、D-500、DC-600、DCC-700、DCCC-800、CM-900、CMXCIX-999
千位數(shù)舉例
M-1000、MC-1100、MCD-1400、MD-1500、MDC-1600、MDCLXVI-1666、MDCCCLXXXVIII-1888、MDCCCXCIX-1899、MCM-1900、MCMLXXVI-1976、MCMLXXXIV-1984、MCMXC-1990、MM-2000、MMMCMXCIX-3999
算法分析
羅馬數(shù)字轉(zhuǎn)阿拉伯?dāng)?shù)字
class Solution {public int roman2Integer(String roman) {if (roman.length() < 1) {return 0;}// 定義一個(gè)map將映射關(guān)系存儲(chǔ)起來(lái)Map<Character, Integer> map = new HashMap<>();map.put('I', 1);map.put('V', 5);map.put('X', 10);map.put('L', 50);map.put('C', 100);map.put('D', 500);map.put('M', 1000);int result = 0;char[] chars = roman.toCharArray();for (int i = 0; i < chars.length; i++) {if (i < chars.length - 1) {// 兩兩比較根據(jù)規(guī)則左小右大則為減,左大右小則為加if (map.get(chars[i]) < map.get(chars[i + 1])) {result -= map.get(chars[i]);} else {result += map.get(chars[i]);}} else {// 最后一位必為加result += map.get(chars[i]);}}return result;} }這個(gè)是自己琢磨的,感覺(jué)不夠好,有好的算法還希望大家多多交流~~
下面貼個(gè)LeetCode上的:
public int romanToInt(String s) {int sum=0;if(s.indexOf("IV")!=-1){sum-=2;}if(s.indexOf("IX")!=-1){sum-=2;}if(s.indexOf("XL")!=-1){sum-=20;}if(s.indexOf("XC")!=-1){sum-=20;}if(s.indexOf("CD")!=-1){sum-=200;}if(s.indexOf("CM")!=-1){sum-=200;}char c[]=s.toCharArray();int count=0;for(;count<=s.length()-1;count++){if(c[count]=='M') sum+=1000;if(c[count]=='D') sum+=500;if(c[count]=='C') sum+=100;if(c[count]=='L') sum+=50;if(c[count]=='X') sum+=10;if(c[count]=='V') sum+=5;if(c[count]=='I') sum+=1;}return sum; }阿拉伯?dāng)?shù)字轉(zhuǎn)羅馬數(shù)字(參見(jiàn)羅馬數(shù)字C++實(shí)現(xiàn))
class Solution {public String int2Roman(int num) {// 個(gè)、十、百、千位映射到羅馬數(shù)字的映射表String[][] mapping = {{"", "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"}};return mapping[3][num / 1000 % 10] // 千位+ mapping[2][num / 100 % 10]// 百位+ mapping[1][num / 10 % 10] // 十位+ mapping[0][num % 10]; // 個(gè)位} }
總結(jié)
以上是生活随笔為你收集整理的罗马数字与阿拉伯数字互转的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: html滚动字幕上下,div css里文
- 下一篇: 高中语文读本目录