关于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
var n = Math.floor((Math.log(num+2))/(Math.log(2))-1); //求解2^(n+1)-2
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
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
valueBin2 += '1';
}
console.log('lalalal'+n);
}
return valueBin2.replace(/0/g,'4').replace(/1/g,'7') ;
}
document.write('

幸运数字

');

document.write('方法一:第1个为 '+luckyNumber(1)+"
");

document.write('方法一:第7个为 '+luckyNumber(7)+"
");

document.write('方法一:第15个为 '+luckyNumber(15)+"
");

document.write('方法一:第10000000000个为 '+luckyNumber(10000000000)+"
");

方法二:先求出一个范围内的幸运数字数组(数字大了,浏览器容易崩溃) 

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

转载于:https://www.cnblogs.com/LXY02/p/6770681.html


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部