1009 数字1的数量
给定一个十进制正整数N,写下从1开始,到N的所有正数,计算出其中出现所有1的个数。
例如:n = 12,包含了5个1。1,10,12共包含3个1,11包含2个1,总共5个1。
输入
输入N(1 <= N <= 10^9) |
---|
输出
输出包含1的个数 |
---|
输入样例
12 |
---|
输出样例
5 |
---|
思路:分位考虑,例如11111.
先考虑个位的情况:1111 1
个位为1,而个位之前的情况有0~1111一共1112种。
十位:111 1 1
十位为1,而十位之前的情况:
1.当前三位为111时个位只有两种情况0,1;
2.当前三位不为111时前三位一共有0~110这111种情况
而此时个位有0~9这10种情况。
故当10位为1时一共有111*10+2=1112种情况。
……
以此类推从而得出关于当前位为1的结论。
同理可得当前位为0时和当前位>1时的结论。
AC代码:
#include<bits/stdc++.h>
using namespace std;
int n,ans;
int main ()
{
cin>>n;
int now,after,before,i=1;
while(n/i!=0)
{
now=n/i%10;
before=n/(i*10);
after=n-(n/i)*i;
if(now==1)
ans=ans+before*i+after+1;
else if(now==0)
ans=ans+before*i;
else if(now>1)
ans=ans+(before+1)*i;
i*=10;
}
cout<<ans<<endl;
}
仅为自己理解,如有纰漏欢迎指出。