新手上路!欢迎指点!
题目:
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。
字符 数值
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
例如, 罗马数字 2 写做 II ,即为两个并列的 1 。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。
通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:
I 可以放在 V(5) 和 X(10) 的左边,来表示 4 和 9。
X 可以放在 L(50) 和 C(100) 的左边,来表示 40 和 90。
C 可以放在 D(500) 和 M(1000) 的左边,来表示 400 和 900。
给定一个罗马数字,将其转换成整数。
<script>
var num = prompt('请输入一个数字(0-4999)') * 1;
var str = fun1(num);
console.log(str);
function check(num1, num2, num3, num4, num5, num6, num7) {
var str = '';
for (let i = 0; i < num1; i++) {
str += 'M';
}
for (let i = 0; i < num2; i++) {
str += 'D';
}
for (let i = 0; i < num3; i++) {
if (num3<4) {
str += 'C';
}else if(num2==1){
str += 'CM';
break;
}else{
str += 'CD';
break;
}
}
for (let i = 0; i < num4; i++) {
str += 'L';
}
for (let i = 0; i < num5; i++) {
if (num5 < 4) {
str += 'C';
} else if (num4 == 1) {
str += 'XC';
break;
} else {
str += 'XL';
break;
}
}
for (let i = 0; i < num6; i++) {
str += 'V';
}
for (let i = 0; i < num7; i++) {
if (num7 < 4) {
str += 'I';
} else if (num6 == 1) {
str += 'IX';
break;
} else {
str += 'IV';
break;
}
}
return str;
}
function fun1(num) {
var a1 = Math.floor(num / 1000);
var a11 = num % 1000;
var a2 = Math.floor(a11 / 500);
var a22 = num % 500;
var a3 = Math.floor(a22 / 100);
var a33 = num % 100;
var a4 = Math.floor(a33 / 50);
var a44 = num % 50;
var a5 = Math.floor(a44 / 10);
var a55 = num % 10;
var a6 = Math.floor(a55 / 5);
var a66 = num % 5;
var a7 = a66;
return check(a1, a2, a3, a4, a5, a6, a7);
}
</script>
算法思路:函数调用,字符拼接。