关于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
时间: 2024-08-09 23:26:06

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

bzoj4568 [Scoi2016]幸运数字

Description A 国共有 n 座城市,这些城市由 n-1 条道路相连,使得任意两座城市可以互达,且路径唯一.每座城市都有一个幸运数字,以纪念碑的形式矗立在这座城市的正中心,作为城市的象征.一些旅行者希望游览 A 国.旅行者计划乘飞机降落在 x 号城市,沿着 x 号城市到 y 号城市之间那条唯一的路径游览,最终从 y 城市起飞离开 A 国.在经过每一座城市时,游览者就会有机会与这座城市的幸运数字拍照,从而将这份幸运保存到自己身上.然而,幸运是不能简单叠加的,这一点游览者也十分清楚.他们迷

bzoj 4568: [Scoi2016]幸运数字

4568: [Scoi2016]幸运数字 Time Limit: 60 Sec  Memory Limit: 256 MBSubmit: 848  Solved: 336[Submit][Status][Discuss] Description A 国共有 n 座城市,这些城市由 n-1 条道路相连,使得任意两座城市可以互达,且路径唯一.每座城市都有一个 幸运数字,以纪念碑的形式矗立在这座城市的正中心,作为城市的象征.一些旅行者希望游览 A 国.旅行者计划 乘飞机降落在 x 号城市,沿着 x 号

【bzoj1853】 Scoi2010—幸运数字

http://www.lydsy.com/JudgeOnline/problem.php?id=1853 (题目链接) 今天考试考了容斥,结果空知道结论却不会写= = 题意:求区间中不含6,8两个数字及由6,8组成的数字的倍数的的数有几个 Solution  容斥原理.  先把所有的幸运数字都蒯到一个数组里,将两两之间可以整除的数只留下一个小的.  接下来如果暴力组合统计答案的话肯定会TLE,因为就算去掉了可以被整除的数以后还是有1000多个幸运数组.我们考虑dfs,x记录当前已经枚举到了第几个

2014.11.12模拟赛【美妙的数字】| vijos1904学姐的幸运数字

美妙的数字(number.c/.cpp/.pas) 题目描述 黄巨大认为非负整数是美妙的,并且它的数值越小就越美妙.当然0是最美妙的啦. 现在他得到一串非负整数,对于每个数都可以选择先对它做二进制非运算(模二意义下0.1互换,注意前导0也要交换),然后在任意相邻的两个数之间插入二进制与.二进制或,或者二进制异或.现在他想知道这样计算完产生的最美妙的数字是多少. 一共T组数据.对于每组数据,第一行一个n,表示这组数据中一串数有多少个.下面n个非负整数,表示这串数. 样例输入 2 2 3 6 3 1

[bzoj1853][Scoi2010][幸运数字] (容斥原理)

Description 在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的“幸运号码”是十进制表示中只包含数字6和8的那些号码,比如68,666,888都是“幸运号码”!但是这种“幸运号码”总是太少了,比如在[1,100]的区间内就只有6个(6,8,66,68,86,88),于是他又定义了一种“近似幸运号码”.lxhgww规定,凡是“幸运号码”的倍数都是“近似幸运号码”,当然,任何的“幸运号码”也都是“近似幸运号码”,比如12,16,666都是“近似幸运号码”. 现

[SCOI2010]幸运数字

题目背景 四川NOI省选2010 题目描述 在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的“幸运号码”是十进制表示中只包含数字6和8的那些号码,比如68,666,888都是“幸运号码”!但是这种“幸运号码”总是太少了,比如在[1,100]的区间内就只有6个(6,8,66,68,86,88),于是他又定义了一种“近似幸运号码”.lxhgww规定,凡是“幸运号码”的倍数都是“近似幸运号码”,当然,任何的“幸运号码”也都是“近似幸运号码”,比如12,16,666都是“

1853: [Scoi2010]幸运数字[容斥原理]

1853: [Scoi2010]幸运数字 Time Limit: 2 Sec  Memory Limit: 64 MBSubmit: 2405  Solved: 887[Submit][Status][Discuss] Description 在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的“幸运号码”是十进制表示中只包含数字6和8的那些号码,比如68,666,888都是“幸运号码”!但是这种“幸运号码”总是太少了,比如在[1,100]的区间内就只有6个(6,8,

【bzoj1853】[Scoi2010]幸运数字 容斥原理+搜索

题目描述 在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的“幸运号码”是十进制表示中只包含数字6和8的那些号码,比如68,666,888都是“幸运号码”!但是这种“幸运号码”总是太少了,比如在[1,100]的区间内就只有6个(6,8,66,68,86,88),于是他又定义了一种“近似幸运号码”.lxhgww规定,凡是“幸运号码”的倍数都是“近似幸运号码”,当然,任何的“幸运号码”也都是“近似幸运号码”,比如12,16,666都是“近似幸运号码”. 现在lxhgww

【BZOJ1853/2393】[Scoi2010]幸运数字/Cirno的完美算数教室 DFS+容斥

[BZOJ1853][Scoi2010]幸运数字 Description 在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的“幸运号码”是十进制表示中只包含数字6和8的那些号码,比如68,666,888都是“幸运号码”!但是这种“幸运号码”总是太少了,比如在[1,100]的区间内就只有6个(6,8,66,68,86,88),于是他又定义了一种“近似幸运号码”.lxhgww规定,凡是“幸运号码”的倍数都是“近似幸运号码”,当然,任何的“幸运号码”也都是“近似幸运号码”