Description
给定一个十进制正整数 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”。
Input
多测试用例,一个占一行:一个正整数 n ( 1 ≤ n ≤ 10000 )
Output
一个测试用例输出一行:一个正整数,即 “1” 的个数。
Sample Input
12
2
Sample Output
5
1
错因:不理解题目意思
错误思路:
#include<stdio.h>
int main() {
int i, count, n;
while (scanf("%d", &n) == 1)
{
count = 0;
for (i = 1; i <= n; i++)
{
if (i % 10 == 1)
count++;
if (i / 10 == 1)
count++;
}
printf("%d\n", count);
}
return 0;
}
这样的话只能计算n<100的数,大于100的就不适合,所以要求每位上是否有1就要求余和除
解法
c语言
#include<stdio.h>
int main()
{
int i, b, count = 0,n;
while (scanf("%d", &n) == 1)
{
count = 0;
for (i = 1; i <= n; i++) {
b = i;
while (b) /*求数1的个数*/
{
if ((b % 10) == 1)/*求每位上时候含数1*/
count++;
b = b / 10;
}
}
printf("%d\n", count);
}
return 0;
}