日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2023/12/14 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 罗马数字与阿拉伯数字的相互转化 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目

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.


這兩道題就是要我們?cè)?~3999(為什么小于4000呢?)的范圍內(nèi)將用阿拉伯?dāng)?shù)字表示的整數(shù)與用羅馬數(shù)字表示的數(shù)相互轉(zhuǎn)換。

羅馬數(shù)字

在將這兩者轉(zhuǎn)化之前,我們需要先了解一下羅馬數(shù)字及其規(guī)則。

(羅馬數(shù)字的起源,變化以及發(fā)展跟我們的主題無(wú)關(guān),想要知道的自己上網(wǎng)查找。)

羅馬數(shù)字一共有7個(gè)基本符號(hào),分別為:I(1)、V(5)、X(10)、L(50)、C(100)、D(500)和M(1000),括號(hào)內(nèi)的值表示其大小。注意:羅馬數(shù)字并沒(méi)有表示0的符號(hào)。

規(guī)則

1. 相同的數(shù)字連寫、所表示的數(shù)等于這些數(shù)字相加得到的數(shù)。 如 III表示 3,XX表示20。但是,一般情況下,連寫不能超過(guò)3次,V、L和D不能連寫。

2. 小的數(shù)字在大的數(shù)字的右邊,所表示的數(shù)等于這些數(shù)字相加得到的數(shù)。 如 VI 表示 6。

3. 小的數(shù)字在大的數(shù)字的左邊,所表示的數(shù)等于大數(shù)減小數(shù)得到的數(shù)。 如 IX 表示 9, CD表示400。但是,這個(gè)僅限于I在V或者X的左邊, X在L或C的左邊,C在D或M的左邊。例如99表示成 XCIX,不能表示為 IC。而且左減數(shù)字只能為一位。例如8表示成VII,不能表示成IIX。

4. 在一個(gè)數(shù)的上面畫一條橫線、表示這個(gè)數(shù)擴(kuò)大 1000 倍。(由于在這兩道題目中,無(wú)法表示出來(lái),因此最大只能表示3999,要表示5000就只能在V上面加上橫線)。

個(gè)人理解

看了上面的規(guī)則后,其實(shí)有些人對(duì)于羅馬數(shù)字的表示還可能云里霧里的。如果你把IV(4), IX(9), XL(40),XC(90),CD(400),CM(900)看成一個(gè)數(shù)字。在將一個(gè)數(shù)表示成羅馬數(shù)字的時(shí)候,按照從左到右的寫法,從大到小選擇羅馬數(shù)字符號(hào)就可以了。

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

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

代碼

在int->roman中,我用一個(gè)表存儲(chǔ)十進(jìn)制數(shù)上每個(gè)位上的數(shù)字對(duì)應(yīng)的羅馬數(shù)字。在轉(zhuǎn)換的時(shí)候,只要求解出每個(gè)位置上的數(shù)字,再查表后將得到的字符連接起來(lái)就可以得出結(jié)果。

在roman->int中,用一個(gè)int類型的變量表示羅馬數(shù)字代表的值,若使用查表的方法需要先對(duì)字符串進(jìn)行分割,有點(diǎn)麻煩,直接利用規(guī)則2和規(guī)則3,若字符str[i]表示的值小于字符str[i+1]表示的值,就減去str[i]的值,否則加上str[i+1]的值。

#include<cmath> class Solution { public:string intToRoman(int num) {// table表存儲(chǔ)十進(jìn)制數(shù)上每個(gè)位所表示的羅馬數(shù)字// 例如, 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;} };

總結(jié)

以上是生活随笔為你收集整理的罗马数字与阿拉伯数字的相互转化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。