4
,7
44
,47
,74
,77
444
,447
,474
,477
,744
,747
,774
,777
4444
,4447
,4474
,4477
,4744
,4747
,4774
,4777
,7444
,7447
,7474
,7477
,7744
,7747
,7774
,7777
n
인 숫자는 개 있습니다.한 자리
수입니다.두 자리
수입니다.세 자리
수입니다.네 자리
수입니다.N자리
수입니다.4자리 숫자 16개는 다음의 규칙을 가집니다 -> 자리 숫자는 번마다 바뀝니다. (t는 4자리 숫자 내에서의 순서)
숫자
를 2^(t-1)
로 나눈 몫
을 2로 나눈
나머지에 따라 값이 바뀝니다.k번째 수 = (2+4+8+...+n)+a
k = int(input())
for n in range(0,100): #2^100은 10^9를 덮을 수 있는 충분히 큰 숫자입니다.
# print(2**(n+1)-2,2**(n+2)-2)
if 2**(n+1)-2 <= k-1 < 2**(n+2)-2:
break
t = 2**(n+1)-2 #k는 n자리 숫자이며
a = k-t #n자리 숫자 중 a번째에 등장합니다
reversed_answer = '' # 일의자리부터 계산하기 때문에 정답과는 반대로 값이 들어옵니다
#`숫자`를 `2^(t-1)`로 나눈 `몫`을 `2로 나눈` 나머지에 따라 값이 바뀌는 걸 함수로 만듭니다
def func(one,two):
temp = (one-1)//2**(two)
if temp%2 == 0:
return '4'
else:
return '7'
for v in range(n+1):
reversed_answer += func(a,v)
answer = reversed_answer[::-1]
print(answer)