题目解析
* 输入输出:第一行输入正整数 nnn(表示数字个数),接下来 nnn 行每行一个正整数;对每个数判断其各位数字之和是否为 777 的倍数,是则输出 Yes,否则输出 No。
* 数据范围:nnn 通常不超过 100010001000(GESP 二级),单个正整数在标准 int 范围内(一般 ≤109\leq 10^9≤109)。
* 复杂度要求:时间复杂度 O(n⋅log10ai)O(n \cdot \log_{10} a_i)O(n⋅log10 ai )(与数字位数成正比),空间复杂度 O(1)O(1)O(1)。
* 算法知识点:数位分解、模拟、取模运算
思路解析
1. 数位提取:对于每个待判断的整数 xxx,需要将其各位数字分离并求和。代码采用字符串转换法:利用 to_string(x) 将数字转为字符串,遍历每个字符。
2. 字符转数值:通过 s[i] - '0' 将字符形式的数字(如 '5')转换为对应的整数值(5),并累加至总和 ans。
3. 倍数判定:计算 ans % 7,若余数为 000 则说明是 777 的倍数,返回 true;否则返回 false。
4. 批量处理:主函数循环读取 nnn 个数字,调用判定函数并输出对应结果。
完整代码