LeetCode-Algorithms-12.整數(shù)轉(zhuǎn)羅馬數(shù)字

/* 1.題目描述 */

羅馬數(shù)字包含以下七種字符: I令境, V, X顾瞪, L舔庶,C,D 和 M陈醒。

                       字符          數(shù)值
                        I             1
                        V             5
                        X             10
                        L             50
                        C             100
                        D             500
                        M             1000

例如惕橙, 羅馬數(shù)字 2 寫做 II ,即為兩個(gè)并列的 1钉跷。12 寫做 XII 弥鹦,即為 X + II 。 27 寫做  XXVII, 即為 XX + V + II 爷辙。

通常情況下彬坏,羅馬數(shù)字中小的數(shù)字在大的數(shù)字的右邊。但也存在特例膝晾,例如 4 不寫做 IIII栓始,而是 IV。數(shù)字 1 在數(shù)字 5 的左邊血当,所表示的數(shù)等于大數(shù) 5 減小數(shù) 1 得到的數(shù)值 4 幻赚。同樣地,數(shù)字 9 表示為 IX臊旭。這個(gè)特殊的規(guī)則只適用于以下六種情況:

I 可以放在 V (5) 和 X (10) 的左邊落恼,來表示 4 和 9。
X 可以放在 L (50) 和 C (100) 的左邊离熏,來表示 40 和 90佳谦。 
C 可以放在 D (500) 和 M (1000) 的左邊,來表示 400 和 900滋戳。

給定一個(gè)整數(shù)钻蔑,將其轉(zhuǎn)為羅馬數(shù)字。輸入確保在 1 到 3999 的范圍內(nèi)胧瓜。

示例:

示例 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.

/* 2.提交記錄 */

12.整數(shù)轉(zhuǎn)羅馬數(shù)字.png

/* 3.算法思想 */

由題目可知矢棚,有13個(gè)已知的羅馬數(shù)字及其對(duì)應(yīng)的整數(shù)。由于限制了整數(shù)范圍府喳,使得題目簡(jiǎn)單不少蒲肋。因?yàn)樽畲蟮恼麛?shù)是3999,所以可從整數(shù)最高位開始钝满,與已知的13個(gè)羅馬數(shù)字從高到低對(duì)應(yīng)的整數(shù)依次比較兜粘,再利用 strcat() 字符串拼接函數(shù)實(shí)現(xiàn)整數(shù)轉(zhuǎn)換為羅馬數(shù)字。
另外弯蚜,由于整數(shù)最大不超過3999孔轴,3888對(duì)應(yīng)的是最長(zhǎng)的羅馬數(shù),len(MMMDCCCLXXXVIII) = 15, 再加1個(gè)字符來存'\0'碎捺,所以最少需要申請(qǐng)的空間大小為 (char *)malloc(16 * sizeof(char) )路鹰。

每道題目都有很多種不同的解法贷洲,對(duì)比其他解法,目前這種解法是我覺得比較簡(jiǎn)單高效的解法晋柱。

/* 4.實(shí)現(xiàn)過程 */

char * intToRoman(int num){

    char *roman[] = { "M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I" };
    int nums[] = {   1000, 900, 500,400,100, 90, 50,  40 , 10 , 9 , 5 ,  4 , 1 };

    char *str = (char *)malloc(16 * sizeof(char));
    memset(str,0,16 * sizeof(char));       /*初始化malloc動(dòng)態(tài)分配的堆內(nèi)存*/
    
    for(int i = 0;i < 13;i++){
        while( num >= nums[i] ){
            strcat(str,roman[i]);         /*字符串拼接*/
            num -= nums[i];
        }
    }
    return str;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末优构,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子雁竞,更是在濱河造成了極大的恐慌钦椭,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件碑诉,死亡現(xiàn)場(chǎng)離奇詭異彪腔,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)进栽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門德挣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人泪幌,你說我怎么就攤上這事盲厌。” “怎么了祸泪?”我有些...
    開封第一講書人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵吗浩,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我没隘,道長(zhǎng)懂扼,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任右蒲,我火速辦了婚禮阀湿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘瑰妄。我一直安慰自己陷嘴,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開白布间坐。 她就那樣靜靜地躺著灾挨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪竹宋。 梳的紋絲不亂的頭發(fā)上劳澄,一...
    開封第一講書人閱讀 51,521評(píng)論 1 304
  • 那天,我揣著相機(jī)與錄音蜈七,去河邊找鬼秒拔。 笑死,一個(gè)胖子當(dāng)著我的面吹牛飒硅,可吹牛的內(nèi)容都是我干的砂缩。 我是一名探鬼主播作谚,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼梯轻!你這毒婦竟也來了食磕?” 一聲冷哼從身側(cè)響起尽棕,我...
    開封第一講書人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤喳挑,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后滔悉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體伊诵,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年回官,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了曹宴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡歉提,死狀恐怖笛坦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情苔巨,我是刑警寧澤版扩,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站侄泽,受9級(jí)特大地震影響礁芦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜悼尾,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一柿扣、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧闺魏,春花似錦未状、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至烹骨,卻和暖如春翻伺,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背沮焕。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工吨岭, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人峦树。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓辣辫,卻偏偏與公主長(zhǎng)得像旦事,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子急灭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容