


🎯《数位之和》
这是一道 非常标准、非常经典、二级必考类型题目!
🧩 一、先看题目
1、小杨有很多正整数。
他说:
如果一个数"每一位数字加起来"的总和是 7 的倍数
那它就是一个"美丽数字" 🌸
2、你的任务:
判断每个数是不是美丽数字。
📝 二、输入长什么样?
1、例如:
cpp
3
7
52
103
2、第一行:
cpp
3
3、表示有 3 个数要判断。
后面三行是:
cpp
7
52
103
🎯 三、什么是"数位之和"?
举例讲清楚 👇
1、🌸 例1:103
(1)每一位数字:
cpp
1 + 0 + 3
= 4
(2)4 是 7 的倍数吗?
👉 不是!
输出:
cpp
No
2、🌸 例2:25
(1)每一位数字:
cpp
5 + 2
= 7
(2)7 是 7 的倍数吗?
👉 是!
输出:
cpp
Yes
🧠 四、关键技术 ------ 怎么拆数字?
1、🎯 技巧1:取个位
cpp
x % 10
2、🎯 技巧2:去掉个位
cpp
x = x / 10
这两个操作组合起来,就能把数字拆开!
3、🎯 技巧3:如何确定拆完了?
cpp
while (x)
意思是:
只要 x 不是 0,就继续拆。
🧠 五、参考程序:
cpp
#include<bits/stdc++.h>
using namespace std;
int main(){
int n; // 有多少个数
cin >> n;
for(int i = 1; i <= n; i++){
int x; // 当前输入的数
cin >> x;
int tot = 0; // 保存每一位数字之和
while(x){
tot += x % 10; // 取个位
x /= 10; // 去掉个位
}
if(tot % 7 == 0)
cout << "Yes\n";
else
cout << "No\n";
}
return 0;
}
🎯 六、分步讲解
1、第一步
读入有多少个数:
cpp
int n;
cin>>n;
2、第二步
计数器小本本准备好:
cpp
int ans=0;
3、第三步
用 for 循环处理每一个数。
cpp
for(int i=1;i<=n;i++){
int x;
cin>>x;
4、第四步
拆数字,用 while 循环。
cpp
while(x){
tot+=(x%10);
x/=10;
}
5、第五步
进行判断:
cpp
tot % 7 == 0
(1)如果能整除 7:
👉 Yes
(2)否则:
👉 No
🌟 七、核心考点
| 考点 | 是否重要 |
|---|---|
| %10 取个位 | ⭐⭐⭐⭐⭐ |
| /10 去个位 | ⭐⭐⭐⭐⭐ |
| while(x)循环判断是否数字拆完 | ⭐⭐⭐⭐ |
| 判断是否是倍数 | ⭐⭐⭐ |
| for循环多组数据处理 | ⭐⭐⭐ |
🚀 八、本题属于什么类型?
这是:
🎯 数位处理题
🎯 模拟题
🎯 循环 + 取余经典题
在二级考试中是必考题!
🧠 九、升级思考
1、题目如果改成:
(1)判断数字之和,是否是 9 的倍数?
你都会做吗? 😄
(2)只需要改一个数字:
cpp
tot % 9 == 0
就可以啦!
(3)参考程序:
cpp
#include<bits/stdc++.h>
using namespace std;
int main(){
int n; // 有多少个数
cin >> n;
for(int i = 1; i <= n; i++){
int x; // 当前输入的数
cin >> x;
int tot = 0; // 保存每一位数字之和
while(x){
tot += x % 10; // 取个位
x /= 10; // 去掉个位
}
if(tot % 9 == 0)
cout << "Yes\n";
else
cout << "No\n";
}
return 0;
}
2、题目如果改成:
(1)判断数字之和,是否既是偶数,还是3的倍数?
你都会做吗? 😄
(2)那我们按照题目要求来增加判断条件
cpp
tot % 3 == 0 && tot % 2 == 0
(3) 参考程序
cpp
#include<bits/stdc++.h>
using namespace std;
int main(){
int n; // 有多少个数
cin >> n;
for(int i = 1; i <= n; i++){
int x; // 当前输入的数
cin >> x;
int tot = 0; // 保存每一位数字之和
while(x){
tot += x % 10; // 取个位
x /= 10; // 去掉个位
}
if(tot % 3 == 0 && tot % 2 == 0 )
cout << "Yes\n";
else
cout << "No\n";
}
return 0;
}
3、题目如果改成:
(1)判断数字之和,是否是7的倍数,或者数字中有7就是完美数字?
你都会做吗? 😄
(2)那我们按照题目要求,来增加判断条件。
cpp
int flag = 0;
if (x%10 == 7) flag = 1;
(3) 参考程序
cpp
#include<bits/stdc++.h>
using namespace std;
int main(){
int n; // 有多少个数
cin >> n;
for(int i = 1; i <= n; i++){
int x; // 当前输入的数
cin >> x;
int tot = 0; // 保存每一位数字之和
int flag = 0; //判断数字是否是7,默认不是7
while(x){
tot += x % 10; // 取数字求和
if(x % 10 == 7) flag = 1; //判断所拆数字是否为7
x /= 10; // 去掉个位
}
if(tot % 7 == 0 || flag)
cout << "Yes\n";
else
cout << "No\n";
}
return 0;
}
🎉 恭喜大家!
现在已经掌握:
🔥 数位拆分
🔥 数位求和
🔥 判断倍数
🔥 分位判断
🔥 多组数据处理