import java.util.Scanner;
public class LuckyNumber {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
LuckyNumber lNumber = new LuckyNumber();
Scanner in = new Scanner(System.in);
while(true){
String kString = in.nextLine();
int k = Integer.parseInt(kString);
lNumber.obtain(k);
}
}
public void obtain(int k){//第k位幸运数
int bit = 1;//幸运数字有几位
int sum = (int)Math.pow(2, bit);
while(k>sum){//如果k=12,第12位是747,是3位数。k<2^1+2^2+2^3:可以得到bit=3
bit++;
sum = sum+(int)Math.pow(2, bit);
}
int luck = bit-1;//k=12, 2^1+2^2+2^2+2^1 (747);k=9, 2^1+2^2+2^2-2^1+2^0(474);k=14, 2^1+2^2+2^3(777)
if(sum == k){//解决类似于k=14的问题
for(int i=1; i<=bit; i++){
System.out.print("7");
}
System.out.print("\r\n");
return;
}
int[] arr = new int[bit];//把每一位数字都放到数组里
int base = sum-(int)Math.pow(2, bit);
base = base+(int)Math.pow(2, luck);
for(int p=luck; p>=0; p--){
if(k>base){//大于则该位7, 第12位747 12>2^1+2^2+2^2,那么arr[2]=7
arr[luck-p]=7;
base=base+(int)Math.pow(2, p-1);
}else if(k<base){
arr[luck-p]=4;
base=base-(int)Math.pow(2, p-1);
}else{//if k==base, 那么该位为4,并且以后各位都为7
arr[luck-p]=4;
for(int q=luck-p+1; q<arr.length; q++){
arr[q] = 7;
}
break;
}
}
for(int r=0; r<arr.length; r++){
System.out.print(arr[r]);
}
System.out.print("\r\n");
}
}
这个的问题是没有考虑大数
幸运数字
最新推荐文章于 2024-07-08 22:12:26 发布