1. 问题背景与理解
这道题目来自第十六届蓝桥杯C组A题,要求找出20万以内所有数位和能被5整除的数字。作为编程竞赛的经典题型,它考察了参赛者对数字处理、循环结构和条件判断的综合运用能力。
数位和(Digit Sum)是指一个数字各位相加的总和。例如:
- 数字123的数位和是1+2+3=6
- 数字2024的数位和是2+0+2+4=8
我们需要设计一个算法,遍历1到200,000之间的所有整数,对每个数字计算其数位和,然后判断这个和是否能被5整除。最终输出所有符合条件的数字。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 基础解法实现
2.1 算法思路
最直接的解法是使用暴力枚举法:
- 遍历1到200,000的每个数字
- 对每个数字,计算其数位和
- 检查数位和是否能被5整除(即数位和%5 == 0)
- 如果满足条件,则记录或输出该数字
2.2 C语言实现代码
c复制#include <stdio.h>
// 计算数位和的函数
int digitSum(int num) {
int sum = 0;
while (num > 0) {
sum += num % 10; // 取最后一位
num /= 10; // 去掉最后一位
}
return sum;
}
int main() {
int count = 0;
for (int i = 1; i <= 200000; i++) {
if (digitSum(i) % 5 == 0) {
count++;
// 如果需要输出数字,取消下面注释
// printf("%d\n", i);
}
}
printf("Total numbers: %d\n", count);
return 0;
}
2.3 代码解析
digitSum函数通过不断取模和整除运算,逐位累加得到数位和- 主循环从1到200,000遍历每个数字
- 对每个数字调用
digitSum并检查是否能被5整除 - 统计符合条件的数字总数
注意:直接输出所有符合条件的数
