竞赛
考级
简简单单 求求你,赞一个!
题目解析 * 输入输出:第一行输入正整数 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 个数字,调用判定函数并输出对应结果。 完整代码
#include<bits/stdc++.h> using namespace std; int main() { int n,a[105]; cin>>n; while(n--){ //正片开始 int b,cut=0; cin>>b; while(b!=0){ cut=cut+b%10; //数位之和 b=b/10; } if(cut%7==0) cout<<"Yes"<<endl; //判断与输出 else cout<<"No"<<endl; } return 0; }
提交答案之后,这里将显示提交结果~