leetcode:Integer to Roman(整數轉化為羅馬數字)


Question:

Given an integer, convert it to a roman numeral.

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

給你一個整數,把它轉化為羅馬數字,輸入保證在1到3999之間。

關於羅馬數字介紹:

       1、計數方法:① 羅馬數字就有下面七個基本符號:Ⅰ(1)、Ⅴ(5)、Ⅹ(10)、L(50)、C(100)、D(500)、M(1000)。

                             ② 相同的數字連寫,所表示的數等於這些數字相加得到的數,如:Ⅲ = 3;XX=20;CC=200;MMM=3000;

                             ③ 小的數字在大的數字的右邊,所表示的數等於這些數字相加得到的數, 如:Ⅷ = 8;Ⅻ = 12;

                             ④ 小的數字,(限於Ⅰ、X 和C)在大的數字的左邊,所表示的數等於大數減小數得到的數,如:Ⅳ= 4;Ⅸ= 9;

                             ⑤  正常使用時連寫的數字重復不得超過三次;

 

   2、組數規則: ① 基本數字Ⅰ、X 、C 中的任何一個,自身連用構成數目,或者放在大數的右邊連用構成數目,都不能超過三個;放在大數的左邊只能用一個。

                         ② 不能把基本數字V 、L 、D 中的任何一個作為小數放在大數的左邊采用相減的方法構成數目;放在大數的右邊采用相加的方式構成數目;

                         ③ V 和X 左邊的小數字只能用Ⅰ。

                         ④ L 和C 左邊的小數字只能用X。

                         ⑤ D 和M 左邊的小數字只能用C。

  3、對照舉例:    ① 個位舉例:Ⅰ,1 】Ⅱ,2】 Ⅲ,3】 Ⅳ,4 】Ⅴ,5 】Ⅵ,6】Ⅶ,7】 Ⅷ,8 】Ⅸ,9 】

            ② 十位舉例:Ⅹ,10】 Ⅺ,11 】Ⅻ,12】 XXXV,35 】XXXIX,39】 XL,40】 L,50 】LI,51】 LV,55】 XC,90 】XCIII,93】 XCV,95 】XCVIII,98】

                                ③ 百位舉例:C,100】 CC,200 】CCC,300 】CD,400】 D,500 】DC,600 】DCC,700】 DCCC,800 】CM,900】 CMXCIX,999】

                                ④ 千位舉例:M,1000】 MC,1100 】MCD,1400 】MD,1500 】MDC,1600 】 MCMXC,1990 】MM,2000 】MMMCMXCIX,3999

算法基本思想:  這個題僅僅要求到3999比較簡單,根據羅馬數字的構建數字的規則,無論個位十位百位還是千位都有相同的構造方法,但是所表示的字母是不同的,所以我想到去寫一個函數,public String intToCharacter(int n,int i),n表示數位上的數字,i表示要轉化的整數從右到左第幾位,這個函數可以把單獨的數字轉化成羅馬字母,在public String intToRoman(int num) 函數中,傳入要轉化的整數num,然后依次從右向左取出各位,依次求相應羅馬數字,並進行字符串拼接,就能得到所需要的結果。

  代碼實現(java):

 1 class Solution {
 2     public String intToRoman(int num) {
 3         String str="";
 4         int i=1,n;  //i表示從右到左整數第幾位
 5         while(num>0){
 6         n=num%10;  //表示數位上的數字
 7         num/=10;
 8         str=intToCharacter(n, i).concat(str);  //把每一位返回的字符串和str相連
 9         i++;
10         }
11         return str;
12     }
13     public String intToCharacter(int n,int i){//n表示特定的輸入,i表示個位十位百位或者千位
14         String str1,str2,str3;//拿0~9之間的數舉例,str1表示I,str2表示V,str3表示X
15         String str="";//這個函數返回特定位上的羅馬數字表示形式
16         if(1==i){            //下面if語句是判斷n是哪一位上的,依次用羅馬數字表示1、5、10
17             str1="I";        //個位上的數
18             str2="V";
19             str3="X";
20         }
21         else if(2==i){
22             str1="X";       //十位上的數
23             str2="L";
24             str3="C";
25         }else if(3==i){
26             str1="C";       //百位上的數
27             str2="D";
28             str3="M";
29         }else{
30             str1="M";     //千位上的數,因為最大數到3999,所以str2和str3為空
31             str2="";
32             str3="";
33         }
34         switch(n){         //switch對各數字進行組合以個位上的數舉例如下
35         case 0:break;           //
36         case 1:str+=str1;break;    //I
37         case 2:str+=str1+str1;break;  //II
38         case 3:str+=str1+str1+str1;;break;//III
39         case 4:str+=str1+str2;break;     //IV
40         case 5:str+=str2;break;           //V
41         case 6:str+=str2+str1;break;      //VI
42         case 7:str+=str2+str1+str1;break;    //VII
43         case 8:str+=str2+str1+str1+str1;break;    //VIII
44         case 9:str+=str1+str3;break;          //IX
45         }
46         return str;
47     }
48 }

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM