【题目描述】
给定一个十进制正整数n(1≤n≤10000),写下从1到n的所有整数,然后数一下其中出现的数字“1
”的个数。
例如当n=2时,写下1,2。这样只出现了1个“1
”;当n=12时,写下1,2,3,4,5,6,7,8,9,10,11,12。这样出现了5个“1
”。
【输入】
正整数n。1≤n≤10000。
【输出】
一个正整数,即“1
”的个数。
【输入样例】
12
【输出样例】
5
【解题思路】
-
初始化计数器:设置一个计数器用于记录数字“1”出现的次数。
-
遍历所有数字:从1遍历到n,对每个数字,将其转换为字符串形式或直接按位检查。
-
计算每个数字中“1”的个数:
- 如果选择转换为字符串,那么遍历字符串的每一个字符,每遇到字符“1”,计数器加1。
- 如果按位检查,可以通过不断地对数字取余和除以10的操作来检查每一位数字是否为1。
-
输出结果:遍历完成后,输出计数器的值,即为所求。
【代码实现】
#include <iostream>
using namespace std;
int countOnes(int num) {
int count = 0;
while (num > 0) {
if (num % 10 == 1) {
count++; // 如果当前位是1,则计数器加1
}
num /= 10; // 移到下一位
}
return count;
}
int main() {
int n, totalCount = 0;
cin >> n;
for (int i = 1; i <= n; ++i) {
totalCount += countOnes(i); // 为每个数计算1的个数,并累加
}
cout << totalCount << endl;
return 0;
}