题解
2026-02-05 23:03:32
发布于:浙江
7阅读
0回复
0点赞
题目解析
- 输入输出:第一行输入正整数 (表示数字个数),接下来 行每行一个正整数;对每个数判断其各位数字之和是否为 的倍数,是则输出
Yes,否则输出No。 - 数据范围: 通常不超过 (GESP 二级),单个正整数在标准
int范围内(一般 )。 - 复杂度要求:时间复杂度 (与数字位数成正比),空间复杂度 。
- 算法知识点:
数位分解、模拟、取模运算
思路解析
- 数位提取:对于每个待判断的整数 ,需要将其各位数字分离并求和。代码采用字符串转换法:利用
to_string(x)将数字转为字符串,遍历每个字符。 - 字符转数值:通过
s[i] - '0'将字符形式的数字(如'5')转换为对应的整数值(5),并累加至总和ans。 - 倍数判定:计算
ans % 7,若余数为 则说明是 的倍数,返回true;否则返回false。 - 批量处理:主函数循环读取 个数字,调用判定函数并输出对应结果。
完整代码
#include <bits/stdc++.h>
using namespace std;
// 判断x是否为美丽数字(各位数字之和是7的倍数)
bool check(int x) {
// 将整数转为字符串,便于逐位处理
string s = to_string(x);
int ans = 0;
// 遍历字符串中的每个字符
for (int i = 0; i < s.size(); i++) {
// 字符转数字:减去'0'的ASCII码值
ans += s[i] - '0';
}
// 判断总和是否能被7整除
return (ans % 7 == 0);
}
int main() {
int t;
cin >> t; // 读入正整数个数n
while (t--) {
int x;
cin >> x;
// 根据判定结果输出Yes或No
if (check(x)) {
cout << "Yes" << endl;
}
else {
cout << "No" << endl;
}
}
return 0;
}
这里空空如也

有帮助,赞一个