1009 数字1的数量
基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题
收藏
关注
给定一个十进制正整数N,写下从1开始,到N的所有正数,计算出其中出现所有1的个数。
例如:n = 12,包含了5个1。1,10,12共包含3个1,11包含2个1,总共5个1。
Input
输入N(1 <= N <= 10^9)
Output
输出包含1的个数
Input示例
12
Output示例
5
题解在我另一个博客上。
#include<iostream>
#include<string.h>
using namespace std;
int fun(long long n){
long long before,index,after,i=1,count=0;
while(n/i!=0){
index=(n/i)%10; before=n/(i*10);after=n-(n/i)*i;
if(index>1) count+=(before+1)*i; //+1意思为after=i的情况 //例子 328 index=2 十位上的1个数为(3+1)*10
else if(index==0) count+=before*i;//在i位上不在1 其它位上都有1
else if(index==1) count+=before*i+after+1;//1*i 一个1 1 after 个一 加上before*i个1
i*=10;
}
return count;
}
int main(){
long long x;
cin>>x;
cout<<fun(x)<<endl;
return 0;
}