Nguồn đề bài: http://www.spoj.com/PTIT/problems/BCTEST11/
1. Đề bài BCTEST11 spoj PTIT
Bờm rất yêu thích các số may mắn. Ta biết rằng một số gọi là số may mắn nếu biểu diễn thập phân của nó chỉ chứa các chữ số may mắn là 4 và 7. Ví dụ: Các số 47,744,4 là số may mắn còn 5,17,467 không phải là số may mắn.
Từ định nghĩa trên, Bờm định nghĩa ra khái niệm số chia may mắn. Một số là số chia may mắn nếu nó chia hết cho ít nhất một số may mắn. Ví dụ: 8,14,.. Bạn hãy giúp Bờm xác định xem số N có phải là số chia may mắn hay không?
Dữ liệu:
Một số nguyên duy nhất N (1≤N≤1000). .
Kết quả:
In ra “YES” nếu N là số chia may mắn, hoặc “NO” nếu ngược lại.
Ví dụ:
INPUT | OUTPUT |
47 | YES |
INPUT | OUTPUT |
16 | YES |
INPUT | OUTPUT |
78 | NO |
2. Hướng dẫn BCTEST11 spoj PTIT
Bạn chỉ cần liệt kê hết tất cả số may mắn từ [1->1000] sau đó thực hiện kiểm tra bình thường là dc. 😀 bạn có thể tính ở ngoài rồi dùng mảng hằng để vào là được.
3. Code tham khảo BCTEST11
const fi=''; nmax=1000; A:array[1..14] of word=(4, 7, 44, 47, 74, 77, 444, 447, 474, 477, 744, 747, 774, 777); type data=longint; var f:text; N,i:data; begin assign(f,fi); reset(f); readln(f,n); close(f); for i:=1 to 14 do if n mod a[i]= 0 then begin writeln('YES'); halt; end; writeln('NO'); end.
cảm ơn ad đã đăng.
Nhưng nếu 1 < N << 10^18(unsigned long long in c/c++) thì liệt kê như thế không ổn.
add có cách nào tổng quát hơn không?