问题链接:POJ NOI0105-40 数1的个数。
-
总时间限制:
- 1000ms 内存限制:
- 65536kB
-
描述
-
给定一个十进制正整数n,写下从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
提示
-
来源
- 习题(8-11) 医学部 2010 期末试题 尤朝
问题分析
这是一个进制有关的计算问题。
取出各位数字是一种套路。
程序说明
把功能封装到函数中,是一种好的做法。
使用常量可以增强程序的可重用性。
AC的C++语言程序:
#include <iostream>
using namespace std;
const int BASE10 = 10;
const int DIGIT = 1;
int countDigit(int n, int digit)
{
int count;
count = 0;
while(n) {
if(n % BASE10 == digit)
count++;
n /= BASE10;
}
return count;
}
int main()
{
int n, count;
cin >> n;
count = 0;
for(int i=1; i<=n; i++)
count += countDigit(i, DIGIT);
cout << count << endl;
return 0;
}