所谓的4和7幸运数字指:4、7、44、47、74、77、444…… 第一个幸运数字为4,第七个幸运数字为444
以下采用了两种方法求第n位的幸运数字:
方法一:二进制思想
function luckyNumber(num) { //以4为0,7为1,利用二进制思想,思路参考来自http://blog.csdn.net/f2006116/article/details/52443975 //等比数列求和,要求解2^(n+1)-2<num的n值 var n = Math.floor((Math.log(num+2))/(Math.log(2))-1); //求解2^(n+1)-2<num的最小n值 var valueBin = num - (Math.pow(2,n+1)-2)-1; //这里的减一是因为二进制是从零开始的,得到二进制对应的十进制的值 var valueBin2 = valueBin.toString(2); if(valueBin > 0) { //位数为n+1位 if(valueBin2.length < n+1 ){ var queShaoWeiShu = n+1 - valueBin2.length; for(var i=0;i<queShaoWeiShu;i++){ valueBin2 = ‘0‘+ valueBin2.substring(0); } } }else if(valueBin == 0) { //valueBin=0,说明为位数为n+1的开头,要进行补0操作。 valueBin2 = ‘‘; for(var j=0;j<=n;j++) { valueBin2 += ‘0‘; } } else { //valueBin=-1,说明为位数为n的末尾,要进行补1操作。 valueBin2 = ‘‘; for(var k=0;k<n;k++) { valueBin2 += ‘1‘; } console.log(‘lalalal‘+n); } return valueBin2.replace(/0/g,‘4‘).replace(/1/g,‘7‘) ; }document.write(‘<h3>幸运数字</h3>‘);document.write(‘方法一:第1个为 ‘+luckyNumber(1)+"<br/>");document.write(‘方法一:第7个为 ‘+luckyNumber(7)+"<br/>");document.write(‘方法一:第15个为 ‘+luckyNumber(15)+"<br/>");document.write(‘方法一:第10000000000个为 ‘+luckyNumber(10000000000)+"<br/>");
方法二:先求出一个范围内的幸运数字数组(数字大了,浏览器容易崩溃)
function getLuckNum3(inputNum) { var arr = [], i = 0; do { i++; var strArr = i.toString().split(‘‘); var isLuckNum = true; for (var j in strArr) { if (strArr[j] != 4 && strArr[j] != 7) { isLuckNum = false; } } if (isLuckNum) { arr.push(i); if (arr.length == inputNum) { break; } } } while (true); return arr[inputNum - 1];}console.log(getLuckNum3(100)); //744747
时间: 2024-10-25 01:42:00