关于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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值