C++数位和计算学案
适用对象:掌握C++基础语法(变量、循环、输入输出)的学生
学习目标:
- 理解数位和的概念与计算方法。
- 掌握通过循环和取模运算分解数字的技巧。
- 能独立编写程序解决数位和相关问题。
一、知识准备
1. 什么是数位和?
数位和是指一个整数每一位上的数字相加的结果。
示例:
- 输入
123
,数位和为1 + 2 + 3 = 6
- 输入
2024
,数位和为2 + 0 + 2 + 4 = 8
2. 核心算法思路
- 步骤1:通过
% 10
取出当前数字的最后一位。 - 步骤2:通过
/ 10
去掉最后一位,逐步缩小数字。 - 步骤3:循环直到数字变为0。
二、基础代码实现
任务1:计算正整数数位和
代码模板:
#include <iostream>
using namespace std;
int main() {
int num, sum = 0;
cout << "请输入一个正整数:";
cin >> num;
// 循环分解每一位并累加
while (num > 0) {
sum += num % 10; // 取出最后一位
num /= 10; // 去掉最后一位
}
cout << "数位和为:" << sum;
return 0;
}
关键问题思考:
- 如果输入
0
,程序会输出什么?如何改进代码? - 如果输入负数,程序会出错吗?为什么?
三、进阶挑战
任务2:处理负数和零
改进要求:
- 若输入负数,取其绝对值计算数位和。
- 若输入
0
,直接输出0
。
代码修改提示:
// 在输入后添加以下代码
if (num < 0) {
num = -num; // 转为正数
} else if (num == 0) {
cout << "数位和为:0";
return 0;
}
任务3:判断数位和是否为7的倍数
问题描述:输入一个整数,若其数位和是7的倍数,输出 Yes
,否则输出 No
。
代码框架:
// 计算完sum后添加判断
if (sum % 7 == 0) {
cout << "Yes";
} else {
cout << "No";
}
四、综合练习
题目1:美丽数字判断
若一个正整数的数位和是7的倍数,则称为“美丽数字”。编写程序,输入一个整数,判断其是否为美丽数字。
输入示例:
52
输出示例:
Yes // 5+2=7
题目2:大数处理
挑战:输入一个最多包含100位的正整数(以字符串形式读取),计算其数位和。
提示:
string s;
cin >> s;
int sum = 0;
for (char c : s) {
sum += c - '0'; // 字符转数字
}
五、常见错误与调试
- 死循环:忘记更新循环变量(如漏写
num /= 10
)。 - 负数处理:未取绝对值导致结果错误。
- 字符转换错误:在大数处理中误用
int
直接存储超长数字。
六、学习总结
- 核心技能:
- 使用
% 10
和/ 10
分解数字每一位。 - 通过循环累加实现数位和计算。
- 使用
- 扩展应用:
- 数位和可用于验证码生成、数字谜题等问题。
- 自主探索:尝试用递归函数实现数位和计算。
七、课后作业
- XOY-1022 【入门.练1】计算一个数的数位和
- XOY-1023 【入门.练2】比较两个数的数位和
- XOY-1021 【入门.练3】区间数位和
- XOY-1024 【入门.练4】区间数位和总和
- XOY-1025 【提高.练1】数位和为素数的数的个数
- XOY-1026 【提高.练2】平方数的数位和最大值
- XOY-1027 【提高.练3】等差数列的数位和总和
- GESP2-241202 【真题练习】数位和
- GESP2-230902 【真题练习】数字黑洞
学案说明: 学生可结合代码模板和问题引导逐步练习,通过调试和扩展任务深化理解。本文配套题目、题目数据及C++参考代码,有偿分享!