oracle 罗马数字处理,阿拉伯数字转罗马数字(Roman Numeral Converter)

72a54ab0e9a1e93c05f127c2e8091b2b.png

如上图所示,罗马数字由7个基本字符组成['I','V','X','L','C','D','M'],阿拉伯数字num转换时需将数字经过求余运算,对千位以上、百位、十位和个位分别进行处理。

一、千位以上

num/1000的结果为n,结果字符串result需重复n次字符‘M’;可抽象如下函数,重复给定字符char, n次.

function repeatC(char,count){

var result="";

for(var i=0;i

result+=char;

}

return result;

}

二、百位、十位和个位的处理

百位、十位、位的处理类似,以个位处理为例:

当1<=n<=3时,result字符串为重复特定字符 'I' n次;

当n==4时,4=5-1 result字符串为"IV";

当5<=n<=8时,result字符串为'V'+repeatC('I',n-5);

当n==9时,9=10-1,result字符串为"XI";

由此可看出个位数可由'I','V','X'三个字符组合而成。可抽象如下函数:

function generBase(num,arr){

var result="";

if(num>=1&&num<=3){

result=repeatC(arr[0],num);

}

if(num===4){

result=arr[0]+''+arr[1];

}

if(num>=5&&num<=8){

result=arr[1]+''+repeatC(arr[0],num-5);

}

if(num===9){

result=arr[0]+""+arr[2];

}

return result;

}

三、转换为罗马数字

转换函数需要对任意输入的数字n做出判断,通过不断的取余分别对不同的数字位做出相应的处理,转换函数如下:

function convert(num) {

var result="";

if(num>=1000){

result=repeatC('M',Math.floor(num/1000));

num %= 1000;

}

if(num>=100){

result+=generBase(Math.floor(num/100),['C','D','M']);

num %= 100;

}

if(num>=10){

result+=generBase(Math.floor(num/10),['X','L','C']);

num %= 10;

}

if(num>=1){

result+=generBase(Math.floor(num),['I','V','X']);

}

return result;

}

示例:convert(2953);

运行结果为:MMCMLIII;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值