zoukankan      html  css  js  c++  java
  • 阿拉伯数字转换成罗马数字(一)

    最近一个项目有这个需求,琐碎就找找这方面的资料来实现一下,顺便就拿来分享之。

    什么是罗马数字?

    罗马数字是最早的数字表示方式,比阿拉伯数字早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;
        }
     
    工欲善其事必先利其器
  • 相关阅读:
    Java实现 LeetCode 400 第N个数字
    Java实现 LeetCode 400 第N个数字
    Java实现 LeetCode 399 除法求值
    Java实现 LeetCode 399 除法求值
    Java实现 LeetCode 399 除法求值
    Java实现 LeetCode 398 随机数索引
    Java实现 LeetCode 398 随机数索引
    Java实现 LeetCode 398 随机数索引
    linux中的cd ..和cd -命令有什么区别?
    GCC使用
  • 原文地址:https://www.cnblogs.com/CodeGuy/p/3069124.html
Copyright © 2011-2022 走看看