阿拉伯數字轉換成羅馬數字(一)


最近一個項目有這個需求,瑣碎就找找這方面的資料來實現一下,順便就拿來分享之。

什么是羅馬數字?

羅馬數字是最早的數字表示方式,比阿拉伯數字早2000多年,起源於羅馬。如今我們最常見的羅馬數字就是鍾表的表盤符號: Ⅰ, Ⅱ , Ⅲ ,Ⅳ ,Ⅴ ,Ⅵ ,Ⅶ ,Ⅷ ,Ⅸ ,Ⅹ ,Ⅺ ,Ⅻ ……對應阿拉伯數字(就是現在國際通用的數字),就是1,2,3,4,5,6,7,8,9,10,11,12。阿拉伯數字其實是古代印度人發明的,后來由阿拉伯人傳入歐洲,被歐洲人誤稱為阿拉伯數字。

羅馬數字記數方法

基本字符:
I、V、X、L、C、D、M
相應的阿拉伯數字表示為:
1、5、10、50、100、500、1000
(1)相同的數字連寫,所表示的數等於這些數字相加得到的數,如:Ⅲ = 3;
(2)小的數字在大的數字的右邊,所表示的數等於這些數字相加得到的數, 如:Ⅷ = 8;Ⅻ = 12;
(3)小的數字,(限於Ⅰ、X 和C)在大的數字的左邊,所表示的數等於大數減小數得到的數,如:Ⅳ= 4;Ⅸ= 9;
(4)正常使用時,連寫的數字重復不得超過三次。(表盤上的四點鍾“IIII”例外)
(5)在一個數的上面畫一條橫線,表示這個數擴大1000倍。

組數規則

(1)基本數字Ⅰ、X 、C 中的任何一個,自身連用構成數目,或者放在大數的右邊連用構成數目,都不能超過三個;放在大數的左邊只能用一個。
(2)不能把基本數字V 、L 、D 中的任何一個作為小數放在大數的左邊采用相減的方法構成數目;放在大數的右邊采用相加的方式構成數目,只能使用一個。
(3)V 和X 左邊的小數字只能用Ⅰ。
(4)L 和C 左邊的小數字只能用X。
(5)D 和M 左邊的小數字只能用C。

算法實現

代碼是用JS實現的,干貨如下:

Arabit2Roman: function(arabic){
        var alpha:[ 'I', 'V', 'X', 'L', 'C', 'D', 'M' ];
        var roman="";
        var bit = 0;
        while (arabic > 0)  
        {  
            var tempnum = arabic % 10;
            switch (tempnum)  
            {  
                case 3:  
                {   
                    roman=this.alpha[bit]+roman;  
                    tempnum--;
                }  
                case 2:  
                {  
                    roman=this.alpha[bit]+roman;  
                    tempnum--;
                }  
                case 1:  
                {  
                    roman=this.alpha[bit]+roman;  
                    break;  
                }  
                case 4:  
                {  
                    roman=this.alpha[bit + 1]+roman;
                    roman=this.alpha[bit]+roman;  
                    break;  
                }  
                case 8:  
                {  
                    roman=this.alpha[bit]+roman; 
                    tempnum--;
                }  
                case 7:  
                {  
                    roman=this.alpha[bit]+roman; 
                    tempnum--;
                }  
                case 6:  
                {  
                    roman=this.alpha[bit]+roman;  
                    tempnum--;
                }  
                case 5:  
                {  
                    roman=this.alpha[bit + 1]+roman;  
                    break;  
                }  
                case 9:  
                { 
                    roman=this.alpha[bit + 2]+roman; 
                    roman=this.alpha[bit]+roman; 
                    break;  
                }  
                default:  
                {  
                    break;  
                }  
            }  
            bit += 2;  
            arabic = Math.floor(arabic / 10);  
        }  
     return roman;
    }

 

 


免責聲明!

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



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