1009 数字1的数量(思维)
程序员文章站
2022-06-21 19:58:33
给定一个十进制正整数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一个多位数21905:个位:它出现1的数为:1 ~ 21901,一共 2190 - 0 + 1 = 2191十位:它出现1的数为:1x ~ 2181x (x 从0到9)一共:(218 - 0 + 1)10 = 2190...
给定一个十进制正整数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
一个多位数21905:
个位:它出现1的数为:1 ~ 21901,一共 2190 - 0 + 1 = 2191
十位:它出现1的数为:1x ~ 2181x (x 从0到9)一共:(218 - 0 + 1)10 = 2190
百位:它出现1的数为:1xx ~ 211xx ,一共:(21 - 0 + 1) 100 = 2200
千位:它出现1的数为:1xxx ~ 11xxx 和 21000 ~ 21905 ,一共:(1 - 0 + 1)*1000 + (905 - 0 + 1)= 2000 + 906 = 2906
万位:它出现1的数为:1xxxx ~ 1xxxx,一共:10000
如果当前位是0或者大于1时,那么当前结果只与高位有关,如果是1的话,那么还要把低位的也考虑进去。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main()
{
ios::sync_with_stdio(false);
int n,t=1,sum=0,tmp;
cin>>n;
tmp=n;
while(n)
{
if(n%10==0) sum+=(n/10-1+1)*t;
else if(n%10>1) sum+=(n/10+1)*t;
else sum+=(n/10-1+1)*t+(tmp-n*t+1);
t*=10;
n/=10;
}
cout<<sum;
return 0;
}
本文地址:https://blog.csdn.net/weixin_43540515/article/details/107424764
上一篇: 因为我有病呀
下一篇: Android之多线程与异步浅析
推荐阅读
-
destoon实现调用自增数字从1开始的方法
-
Java中Boolean与字符串或者数字1和0的转换实例
-
php通过排列组合实现1到9数字相加都等于20的方法
-
如何用数字思维做一款牛逼的产品
-
安利一款强大的学习软件XMind(顺便放上这几天制作的JavaSE的思维导图day1-day4)
-
JavaScript校验Number(4,1)格式的数字实例代码
-
C语言:编写程序数一下 1到 100 的所有整数中出现多少次数字 9
-
数字规律解算法:求1000以内所有含1的数字的实现方法
-
n-1中缺失的数字(C++/Java双重实现)
-
c语言:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?打印出来?