首先是我自己看完网上的罗马数规则写的又臭又长的代码!(捂脸!!)
1 class Solution { 2 public: 3 string intToRoman(int num) { 4 string s=""; 5 int a[4]={0},i=3; 6 while(num!=0) 7 { 8 a[i]=num%10; 9 num=num/10; 10 i--; 11 } 12 while(a[0]!=0) 13 { 14 s=s+'M'; 15 a[0]--; 16 } 17 if(a[1]!=0) 18 { 19 if(a[1]==9) s=s+'C'+'M'; 20 else if(a[1]>=5) 21 { 22 s=s+'D'; 23 a[1]=a[1]-5; 24 while(a[1]!=0) 25 { 26 s=s+'C'; 27 a[1]--; 28 } 29 } 30 else{ 31 if(a[1]==4) s=s+'C'+'D'; 32 else{ while(a[1]!=0) 33 { 34 s=s+'C'; 35 a[1]--; 36 } 37 } 38 } 39 } 40 if(a[2]!=0) 41 { 42 if(a[2]==9) s=s+'X'+'C'; 43 else if(a[2]>=5) 44 { 45 s=s+'L'; 46 a[2]=a[2]-5; 47 while(a[2]!=0) 48 { 49 s=s+'X'; 50 a[2]--; 51 } 52 } 53 else{ 54 if(a[2]==4) s=s+'X'+'L'; 55 else{ while(a[2]!=0) 56 { 57 s=s+'X'; 58 a[2]--; 59 } 60 } 61 } 62 } 63 if(a[3]!=0) 64 { 65 if(a[3]==9) s=s+'I'+'X'; 66 else if(a[3]>=5) 67 { 68 s=s+'V'; 69 a[3]=a[3]-5; 70 while(a[3]!=0) 71 { 72 s=s+'I'; 73 a[3]--; 74 } 75 } 76 else{ 77 if(a[3]==4) s=s+'I'+'V'; 78 else{ while(a[3]!=0) 79 { 80 s=s+'I'; 81 a[3]--; 82 } 83 } 84 } 85 } 86 return s; 87 } 88 };
下面的是网上流传比较简单的:
1 public static String intToRoman(int num) { 2 String M[] = {"", "M", "MM", "MMM"}; 3 String C[] = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"}; 4 String X[] = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"}; 5 String I[] = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"}; 6 return M[num/1000] + C[(num%1000)/100] + X[(num%100)/10] + I[num%10]; 7 }