1.罗马数字
基本罗马数字为0~3999,其基本组数规则为2点:
1.基本数字 Ⅰ、X 、C 自身连用构成数字、或者放在大数的右边连用构成数字都不能超过三个(例如:III、VIII);放在大数左边只能用一个(例如:IX);
2.基本数字 V 、L 、D 不能放在大数左边构成数字;放在大数右边构成数字只能用一个(例如:XV);阿拉伯数字转换为罗马数字主要思路:
1.计算千、百、十、个位上的数字;
2.逐一转换千、百、十、个位的罗马数字;
3.将千、百、十、个位的罗马数字组合成最终的罗马数字
function convertRoman(num) {
if(!isNaN(num) && num < 4000 && num >= 0){
var newNum = Math.floor(num);
var roman = [['M'], ['C','D'],['X','L'],['I','V']];
var romanNum = [];
var arr = [];
romanNum[0] = Math.floor(newNum / 1000);
romanNum[1] = Math.floor((newNum % 1000) / 100);
romanNum[2] = Math.floor((newNum % 100) / 10);
romanNum[3] = Math.floor(newNum % 10);
for(var i = 0; i < 4; i++){
if(romanNum[i]){
switch(romanNum[i]){
case 1:
case 2:
case 3:
for(var j = 0; j < romanNum[i]; j++){
arr.push(roman[i][0]);
}
break;
case 4:
arr.push(roman[i][0]);
arr.push(roman[i][1]);
break;
case 5:
arr.push(roman[i][1]);
break;
case 6:
case 7:
case 8:
arr.push(roman[i][1]);
for(j = 0; j < (romanNum[i]-5); j++){
arr.push(roman[i][0]);
}
break;
case 9:
arr.push(roman[i][0]);
arr.push(roman[i-1][0]);
break;
case 10:
arr.push(roman[i+1][0]);
break;
}
}
}
}
return arr.join('');
}
2.斐波那契-奇数求和
斐波纳契数列:
斐波纳契数列中的前几个数字是 1、1、2、3、5 和 8,随后的每一个数字都是前两个数字之和。
斐波那契数列奇数求和简单思路:
1.先构造数列,然后同时把符合要求的元素放入新的数组,最后求和;
2.以数列条件直接构造数组,用于求和。
function sumFibs(num) {
var init = 0;
var numArr = [1];
var index = 0;
var sum = 0;
num = Math.floor(num);
while(init < num){
init = numArr[index];
if(index){
init += numArr[index-1];
}
if(init<=num){
numArr.push(init);
}
index++;
}
for(var i in numArr){
if(numArr[i]%2 === 0)continue;
sum += numArr[i];
}
return sum;
}