首页 > 代码库 > 关于4和7的幸运数字生成方法

关于4和7的幸运数字生成方法

所谓的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

关于4和7的幸运数字生成方法