由于只是介于1~3999,所以,最多只有四位数。
第一个想法就是计算出每一位数字,然后根据其权值,转化为Roman数字。需要建立四个查询表,分别对应个十百千上的数字。 
    缺点是需要一定的存储空间。
第二个想法,酷似剥洋葱皮的办法,一点一点削减。 
根据1~3999的Roman数字表示法的规律,按照逐步缩小的办法进行转换。比如,当num>=1000,就增加M,同时num减去1000,再判断……
最后,实现用的第二种方法。 
代码如下: 
class Solution { 
public:
string intToRoman(int num) { 
     string roman; 
     int temp=num; 
     while(temp != 0) 
     { 
         if(temp >= 1000) 
         { 
            temp=temp-1000; 
            roman += “M”; 
         } 
         else if(temp >= 900) 
         { 
             temp -= 900; 
             roman += “CM”; 
         } 
         else if( temp >= 500) 
         { 
             temp -= 500; 
             roman += “D”; 
         } 
         else if(temp >= 400) 
         { 
             temp -= 400; 
             roman += “CD”; 
         } 
         else if(temp >= 100) 
         { 
             temp -= 100; 
             roman += “C”; 
         } 
         else if(temp >= 90) 
         { 
             temp -= 90; 
             roman += “XC”; 
         } 
         else if( temp >= 50) 
         { 
             temp -= 50; 
             roman += “L”; 
         } 
         else if(temp >= 40) 
         { 
             temp -= 40; 
             roman += “XL”; 
         } 
         else if(temp >= 10) 
         { 
             temp -= 10; 
             roman += “X”; 
         } 
         else if(temp >= 9) 
         { 
             temp -= 9; 
             roman += “IX”; 
         } 
         else if( temp >= 5) 
         { 
             temp -= 5; 
             roman += “V”; 
         } 
         else if(temp >= 4) 
         { 
             temp -= 4; 
             roman += “IV”; 
         } 
         else if(temp >= 1) 
         { 
             temp -= 1; 
             roman += “I”; 
         } 
     } 
     return roman; 
    } 
};
 
                   
                   
                   
                   
                             本文介绍了一种将整数转换为罗马数字的高效算法,通过逐步缩小的方法进行转换,避免了存储大量查询表的需求。该算法利用循环结构,根据不同数值范围直接输出对应的罗马数字符号。
本文介绍了一种将整数转换为罗马数字的高效算法,通过逐步缩小的方法进行转换,避免了存储大量查询表的需求。该算法利用循环结构,根据不同数值范围直接输出对应的罗马数字符号。
           
       
           
                 
                 
                 
                 
                 
                
               
                 
                 
                 
                 
                
               
                 
                 扫一扫
扫一扫
                     
              
             
                   446
					446
					
 被折叠的  条评论
		 为什么被折叠?
被折叠的  条评论
		 为什么被折叠?
		 
		  到【灌水乐园】发言
到【灌水乐园】发言                                
		 
		 
    
   
    
   
             
            


 
            