问题:
这条街一共有 2020 位住户,门牌号从 1 到 2020 编号。 小蓝制作门牌的方法是先制作 0 到9 这几个数字字符,最后根据需要将字符粘贴到门牌上,例如门牌 1017 需要依次粘贴字符 1、0、1、7,即需要 1 个字符 0,2 个字符 1,1 个字符 7。请问要制作所有的 1 到 2020 号门牌,总共需要多少个字符?
要解决这个问题,我们需要统计从1到2020的所有门牌号中数字字符2出现的总次数。可以通过遍历每个门牌号,分解其每一位数字并检查是否为2来实现。
方法思路
-
遍历每个门牌号:从1到2020逐个处理每个门牌号。
-
分解每一位数字:对于每个门牌号,通过取余和整除操作分解其每一位数字。
-
统计数字2的出现次数:检查每一位数字是否为2,如果是,则计数器加1。
#include <stdio.h>
int main() {
int count = 0;
for (int i = 1; i <= 2020; i++) {
int num = i;
while (num > 0) {
int digit = num % 10;
if (digit == 2) {
count++;
}
num /= 10;
}
}
printf("%d\n", count);
return 0;
}
代码解释
-
初始化计数器:
count
变量初始化为0,用于累计数字2的出现次数。 -
遍历门牌号:使用
for
循环从1遍历到2020。 -
分解数字:对于每个门牌号
i
,使用while
循环分解其每一位数字。通过取余操作num % 10
获取当前位的数字,然后通过整除操作num /= 10
处理下一位。 -
检查是否为2:如果当前位的数字是2,则计数器
count
加1。 -
输出结果:循环结束后,打印计数器的值,即数字2的总出现次数。