GESP2024年9月认证C++二级( 第三部分编程题(1) 数位之和 )


🎯《数位之和》

这是一道 非常标准、非常经典、二级必考类型题目!


🧩 一、先看题目

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;
}

🎉 恭喜大家!

现在已经掌握:

🔥 数位拆分

🔥 数位求和

🔥 判断倍数

🔥 分位判断

🔥 多组数据处理

这是一道二级必考经典题!


相关推荐
辛苦才能18 分钟前
C++多态原理:虚函数表的内存布局与动态绑定的汇编真相
开发语言·c++
西西弗Sisyphus28 分钟前
Qt 实现一个 水波进度球
c++·qt·c
无忧.芙桃29 分钟前
数据结构之排序算法(中):冒泡排序与快速排序,从相邻交换到工程级优化
c语言·c++·排序算法
Hhy_110735 分钟前
《C++深度解构04》类和对象(下)——类型转换、static、友元与编译器优化
c语言·c++·学习·类和对象·visual studio
qq_199886871 小时前
第7板块·第1节:通用算子分类与设计模式
c++·人工智能·gpu算力·cuda
6Hzlia3 小时前
【Classic 150 刷题计划】 LeetCode 205. 同构字符串 | C++ 双向绑定与哈希表映射
c++·算法·leetcode
神仙别闹9 小时前
基于 C++ 实现(控制台)学生成绩管理系统
开发语言·c++
会周易的程序员9 小时前
5 节点边缘冗余方案(上):基于 aiRaft 的物联网高可用控制面设计
c++·分布式·物联网·raft·iot·共识
qq_1998868712 小时前
第6板块·第4节:构建系统与多文件项目
c++·人工智能·gpu算力
汉克老师13 小时前
GESP2026年9月认证C++三级( 第三部分编程题(2、分割字符串))精讲
c++·gesp·小学生·学c++编程