KTLT18. Lũy thừa 2 Xét tập T chỉ chứa các số nguyên có tích các chữ số (trong hệ thập phân) là một số lũy thừa của 2. Các số này được sắp xếp theo thứ tự tăng dần của giá trị và đánh số bắt đầu từ 1 trở đi. Yêu cầu: Cho số nguyên k (1 ≤ k ≤ 1018). Hãy tìm số thứ k trong tập T. Dữ liệu: Vào từ file văn bản POWER2.INP, gồm nhiều tests, mỗi test cho trên một dòng chứa một số nguyên k. Kết quả: Đưa ra file văn bản POWER2.OUT, kết quả mỗi test đưa ra trên một dòng. Ví dụ:
bool tach(int n){ int t=1; while (n>1){ t=t*(n%10); n=n/10; } if (t==0) return false; if (t==1) return true; while (t>1){ if (t%2!=0) return false; else t=t/2; } return true; }
void xuly(int n){ int dem=0; for (int i=1;i<=100000;++i) if (tach(i)==true){ dem++; f[dem]=i; } cout<<f[n]; }
bool tach(int n){ int t=1; while (n>1){ t=t*(n%10); n=n/10; } if (t==0) return false; if (t==1) return true; while (t>1){ if (t%2!=0) return false; else t=t/2; } return true; }
void xuly(int n){ int dem=0; for (int i=1;i<=100000;++i) if (tach(i)==true){ dem++; f[dem]=i; } cout<<f[n]; }
int main(){ freopen("power2.inp","r",stdin); freopen("power2.out","w",stdout); while (cin>>n) xuly(n); }