我们首先定义 0 到 9 都是好运数,然后从某个好运数开始,持续在其右边添加数字,形成新的数字。我们称一个大于 9 的数字 N 具有祖传好运,如果它是由某个好运数添加了一个个位数字得到的,并且它能被自己的位数整除。
例如 123 就是一个祖传好运数。首先因为 1 是一个好运数的老祖宗,添加了 2 以后,形成的 12 能被其位数 2 (即 12 是一个 2 位数)整除,所以 12 是一个祖传好运数;在 12 后面添加了 3 以后,形成的 123 能被其位数 3 整除,所以 123 是一个祖传好运数。
本题就请你判断一个给定的正整数 N 是不是具有祖传的好运。
输入格式:
每个输入包含 1 个测试用例。每个测试用例第 1 行给出正整数 K (≤1000);第 2 行给出 K 个不超过 10^9 的待评测的正整数,注意这些数字都保证没有多余的前导零。
输出格式:
对每个待评测的数字,在一行中输出 Yes
如果它是一个祖传好运数,如果不是则输出 No
。
输入样例:
5
123 7 43 2333 56160
输出样例:
Yes
Yes
No
No
Yes
分析:num存储每一个需要判断的数字,good用来标记该数字是否为祖传好运数。
由于需要保证任意一个位置作为结尾都是祖传好运数,所以可以先按当前的数字进行判断,然后移除最后一位(num /= 10)而不需要按照题目说的从最左边一位开始看(方便编码)。
类似从右到左分解各个位数, 循环查看当前数字能否整除位数,位数这里我们将数字转换成string再用size()函数比较方便。不能整除就做好标记跳出循环,最后查看标记输出对应的答案
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#include <iostream> using namespace std; int main() { int K, num, good; cin >> K; while (K--) { cin >> num; good = 1; while (num) { if (num % to_string(num).size() != 0) { good = 0; break; } num /= 10; } if (good) cout << "Yes\n"; else cout << "No\n"; } return 0; } |
❤ 点击这里 -> 订阅《PAT | 蓝桥 | LeetCode学习路径 & 刷题经验》by 柳婼