幸运数字 4和7
来源:互联网 发布:好收益网络贷款 编辑:程序博客网 时间:2024/05/16 06:16
题目描述
4和7是两个幸运数字,我们定义,十进制表示中,每一位只有4和7两个数的正整数都是幸运数字。
前几个幸运数字为:4,7,44,47,74,77,444,447...
现在输入一个数字K,输出第K个幸运数。输入
第一行一个数字T(T<=1000)表示测试数据的组数。对于每组测试数据,输出一个数K输出
每组数据输出一行,第K个幸运数。样例输入
35
100
1000000000
样例输出
74744747
77477744774747744747444444447
思路
首先把4和7化为0和1,分别对应起来看,题目就成了求第n位的二进制数,但是这个和普通的二进制数有点不一样。
各种进位的方法都能用的进制转换的方法来套用。
所以首先打个草稿找规律
/*0 - - 2的1次-2
//1 4 0
//2 7 1 2的2次-2
//3 44 00
//4 47 01 2的2次-2+2的一次
//5 74 10
//6 77 11 2的3次-2
//7 444 000
//8 447 001
//9 474 010
//10 477 011 2的3次-2+2的两次
//11 744 100
//12 747 101
//13 774 110
//14 777 111 2的4次-2
//15 4444 0000
*** **** ****
*/
可以看到很明显的几点:
1、当数字有1位时,出现了2次,
当数字有2位时,出现了4次,
当数字有n位时,出现了2^n次。
所以根据这个规律可以根据十进制n来求出二进制有几位。
for (int i=2;;i++)
if( n <= pow(2,i)-2 )
{length=i-1;break;}
这样就求出了二进制的length。
2、在长度为length的区间内,前面一半的数字都是以4打头,后面都是以7打头,
如果去掉头位并且在10位数中减去相应的次数,就可以变成一个length-1的十进制数。例:
输入十进制数13 求出length=3
13 2^3-2+2^2和 2^4-2之间 二进制为774
减去2^3 得到十进制为5 二进制为74
减去2^2 得到十进制为1 二进制位4
可以看到,当前最高位一步一步被取下来了。所以是一个很容易实现的循环。
方法想好以后,代码很快就来了:
代码
import java.util.Scanner;/** * @author Administrator * */public class LuckyNumber {public static void main(String[] args) {Scanner cin = new Scanner(System.in);int count = 0;int n = 0;while (cin.hasNextInt()) {count = cin.nextInt();int nArr[] = new int[count];for (int i = 0; i < count; i++) {nArr[i] = cin.nextInt();}for (int i = 0; i < count; i++) {StringBuilder resultBuilder = new StringBuilder();n = nArr[i];int length;for (int j = 2;; j++)if (n <= Math.pow(2, j) - 2) {length = j - 1;break;}while (length > 0) {length--;if (n > Math.pow(2, length + 1) - 2 + Math.pow(2, length)) {resultBuilder.append(7);n = n - (int) Math.pow(2, length + 1);} else {resultBuilder.append(4);n = n - (int) Math.pow(2, length);}}System.out.println(resultBuilder.toString());}}cin.close();}}
测试
//输入351001000000000//输出7474474777477744774747744747444444447
- 幸运数字 4和7
- python 编程4,和7 幸运数字
- 剑指-4和7幸运数字 (幸运数字 4和7)
- 1214~~~幸运数字4&7
- 4和7为幸运数字,判断[a,b]之间所有由幸运数字组成的数字的个数
- 不用数学函数解幸运数字 4和7的问题
- 幸运数字
- 幸运数字
- 幸运数字
- 幸运数字
- 幸运数字
- 幸运数字
- hdu ztr loves lucky numbers (最小的但不小于n的幸运数字是多少,幸运数字只含4和7,且4的个数等于7的个数)
- 幸运数4&7:给定正整数n,求不大于n的仅由4和7组成的数字的个数
- 幸运的数字8888
- [坑]1430.幸运数字
- 1430.幸运数字
- 1214 幸运数字
- java poi 读取excel文档最简单方式
- ping 非本地子网时报"ping: sendmsg: Network Is Down"
- python3.0 django mysql连接池说明
- HDU 1698 Just A Hook
- poj3041 匈牙利算法 二分图最大匹配
- 幸运数字 4和7
- 安防行业混迹10年之闲聊
- OpenCV学习笔记(十二):OpenCV坐标系与row&col的关系 (Mat::at(x,y)和Mat::at(Point(x, y))的区别)
- 常用排序算法总结9一一计数排序
- Scrollview 嵌套 RecyclerView 及在Android 5.1版本滑动时 惯性消失问题
- shell查看文件空行行号
- HTML5 内联SVG
- GetAdaptersInfo+GetIfTable的例子
- FreeSWITCH 初步