BCSRETAN spoj PTIT- Số may mắn thứ K

Nguồn đề bài: http://www.spoj.com/PTIT/problems/BCSRETAN/

1. Đề bài BCSRETAN spoj PTIT

Chí Phèo thời IT rất yêu thích các số may mắn. Số may mắn là số mà chỉ chứa các chữ số may mắn (có hai chữ số may mắn là 4 và 7) trong biểu diễn thập phân. Các số may mắn sắp xếp tăng dần tạo thành dãy số may mắn. Một số số hạng đầu tiên của dãy số may mắn là: 4,7,44,47,74,77,… Biết Chí có niềm yêu thích như vậy, Thị Nở liền đố Chí tìm số may mắn thứ K trong dãy. Bài toán thực sự hóc búa với Chí, bạn hãy giúp anh Chí câu hỏi này nhé !

Input

Một số nguyên K duy nhất (1≤K≤109)

Output

Số may mắn thứ K trong dãy số may mắn.

Example
Input:
1
Output:
4
 
Input:
3
Output:
44

2. Hướng dẫn BCSRETAN spoj PTIT

Nếu bạn để ý thì sẽ dễ dàng nhận ra dãy số 4,7,44,47,74,77,…  chính là dãy nhị phân. như vậy bạn chỉ cần sinh dãy nhị phân là được

3. Code tham khảo BCSRETAN spoj PTIT

const   fi='';
        nmax=1000000000;
        A:array[1..2] of byte=(4,7);
type
        data=longint;
var
        f:text;
        k,n:data;
        kq:array[0..30] of data;
        spt:data;

procedure xuli;
var     i:data;
begin
        k:=k+1;
        spt:=0;
        while k<>0 do
                begin
                        inc(spt);
                        kq[spt]:=k mod 2;
                        k:=k div 2;
                end;

        for i:=spt-1 downto 1 do
                if kq[i]=0 then
                        write(4)

                else
                        write(7);
end;

begin
        assign(f,fi); reset(f);
        readln(f,k);
        close(f);
        xuli;
end.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *