【题目描述】
给定一个十进制正整数n(1≤n≤10000)n(1≤n≤10000),写下从11到nn的所有整数,然后数一下其中出现的数字“1
”的个数。
例如当n=2n=2时,写下1,21,2。这样只出现了11个“1
”;当n=12n=12时,写下1,2,3,4,5,6,7,8,9,10,11,121,2,3,4,5,6,7,8,9,10,11,12。这样出现了55个“1
”。
【输入】
正整数nn。1≤n≤100001≤n≤10000。
【输出】
一个正整数,即“1
”的个数。
【输入样例】
12
【输出样例】
5
代码:
#include<iostream>
#include <stdio.h>
using namespace std;
int main()
{
int n;
cin>>n;
int findOne(int); //直接将该函数中的while循环放入for循环中,测试的时候不能出现结果,不知道为啥,但是在for循环里调用函数就是可以的
int SumM=0;
for(int i=1;i<=n;i++)
{
SumM+=findOne(i);
}
cout<<SumM;
return 0;
}
int findOne(int a)
{
int Sum=0;
while(a)
{
if(a<10&&a==1)
{
Sum++;
break;
}
else//i>=10;
{
if(a<10) break;
else
{
if(a%10==1)
Sum++;
a /=10;
}
}
}
return Sum;//若主函数与子函数用同一个变量,不管变量在哪里定义好像都不能通用,所以子函数要将Sum传出去
}