前言
- 不知道在本次入门教育赛大家有没有写出这道好奇怪好奇怪呢?
- 快速食用通道:入门教育赛6D 好奇怪好奇怪丨StarryCoding
题目描述
P i p e r Piper Piper喜欢一些奇怪的数字。对于一个奇怪的数字,它的十进制表示中只包含数字 4 4 4或 7 7 7。例如: 47 、 774 、 4 47、774、4 47、774、4是奇怪的数字, 46 、 2024 46、2024 46、2024就不是。
P
i
p
e
r
Piper
Piper认为能被奇怪的数字整除的数字是有些奇怪的数字,现给一个数字
n
n
n,请判断这个数字是否有些奇怪。
PS:请注意区分奇怪与有些奇怪。
输入描述
第一行包含整数 t t t( 1 ≤ t ≤ 1000 1 \le t \le 1000 1≤t≤1000) - 测试用例数。
接下来 t t t行,每行包含一个整数 n ( 1 ≤ n ≤ 1000 ) n(1 \leq n \leq 1000) n(1≤n≤1000) - 需要检查的数字。
保证 n n n的总和不超过1000。
输出描述
打印 t t t个答案–每个测试用例一个。
对于第 i i i 个测试用例如果数字是有些奇怪的,在唯一一行打印“YES”(不带引号),否则,打印“NO”。
输入样例
3
47
16
78
输出样例
YES
YES
NO
题解思路
分析该题目其实不难发现,出题人考察你对分解数位的掌握程度,只要可以正确理解并分析出:
- n n n 的位的值即可求出只要有不为 4 4 4 或者 7 7 7 的数就不是一个奇怪的数字。
- 若
4
4
4 或
7
7
7 是
n
n
n 的因子,那么
n
n
n 一定也是奇怪的数
即根据上述两个分析来进行模拟即可
AC代码
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
void solve() {
int n; cin >> n;
if (n % 4 == 0 || n % 7 == 0) {
cout << "YES" << '\n';
return;
}
while (n > 0) {
if (n % 10 != 4 && n % 10 != 7) {
cout << "NO" << '\n';
return;
}
n /= 10;
}
cout << "YES" << '\n';
}
int main() {
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int _; cin >> _;
while (_--) solve();
return 0;
}