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

🎉 恭喜大家!

现在已经掌握:

🔥 数位拆分

🔥 数位求和

🔥 判断倍数

🔥 分位判断

🔥 多组数据处理

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


相关推荐
lxl13072 小时前
C++算法(3)二分算法
数据结构·c++·算法
星火开发设计2 小时前
C++ 异常处理:try-catch-throw 的基本用法
java·开发语言·jvm·c++·学习·知识·对象
白太岁3 小时前
C++:(3) 线程的关联、条件变量、锁和线程池
开发语言·c++
仰泳的熊猫3 小时前
题目1474:蓝桥杯基础练习VIP-阶乘计算
数据结构·c++·算法·蓝桥杯
WBluuue3 小时前
数据结构与算法:dp优化——树状数组/线段树优化
数据结构·c++·算法·leetcode·动态规划
华科大胡子3 小时前
《Effective C++》学习笔记:条款02
c++·编程语言·inline·const·enum·define
tankeven3 小时前
HJ84 统计大写字母个数
c++·算法
㓗冽3 小时前
阵列(二维数组)-基础题79th + 饲料调配(二维数组)-基础题80th + 求小数位数个数(字符串)-基础题81th
数据结构·c++·算法
默凉4 小时前
C++ 编译过程
开发语言·c++