小韦老师@神犇营-my0117-数 1 的个数
程序员文章站
2024-03-15 16:03:06
...
小韦老师@神犇营-my0117-数 1 的个数
题目:
描述
给定一个正整数 n,数数从 1 到 n 的所有整数中,出现的数字 1 的个数。
例如当 n = 2 时,有数字 1, 2,这里只出现了一个数字 1;当 n = 12 时,有数字 1,2,3,4,5,6,7,8,9,10,11,12,这里出现了五个数字 1。
输入
输入仅一行,为正整数 n (1 <= n <= 10000)。
输出
输出仅一行,为一个正整数,即数字 1 的个数。
输入样例1
12
输出样例1
5
思路:
整体思路:
枚举 1~n,将每个数有的 1 的个数都加起来即可。
具体步骤:
1.定义 n,并且输入 n。
2.定义一个 int 型的变量 sum 作为累加器,用来存储总的有多少个 1,初
始化为 0。
3.用 for 循环枚举 1~n,对于当前的数进行数 1 的个数 cnt ,并将 cnt 累
加到 sum 中。
for (int i = 1; i <= n; i++) { // 枚举 1~n
// 计数器,用来存储当下的数 i 有几个 1,记得初始化为 0
int cnt = 0;
int t = i; // 备份 i,记得不要直接对 i 进行处理
while (t != 0) { // 当 t 不等于 0 时
if (t % 10 == 1) { // 当 t 的最右边一位为 1 时
cnt++; // 计数器加 1
}
t /= 10; // 将 t 处理过的位数“划掉”
}
sum += cnt; // 将当前数 i 有的 1 的个数累加到累加器中
}
4.输出累加器。
思考:
1°cnt 为什么要初始化为 0?可以不初始化麽?可以在 for 循环外面初始
化麽?
2°为什么要将 i 备份?不备份会有什么问题?
完整代码:
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
int sum = 0; // 累加器,用来存储总的有多少个 1
for (int i = 1; i <= n; i++) { // 枚举 1~n
// 计数器,用来存储当下的数 i 有几个 1,记得初始化为 0
int cnt = 0;
int t = i; // 备份 i,记得不要直接对 i 进行处理
while (t != 0) { // 当 t 不等于 0 时
if (t % 10 == 1) { // 当 t 的最右边一位为 1 时
cnt++; // 计数器加 1
}
t /= 10; // 将 t 处理过的位数“划掉”
}
sum += cnt; // 将当前数 i 有的 1 的个数累加到累加器中
}
// 输出累加器
cout << sum;
return 0;
}
上一篇: 【PAT B1007】素数对猜想
下一篇: python求100以内的素数