1. 程式人生 > >51Nod 1009:1009 數字1的數量 (思維)

51Nod 1009: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 <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <math.h>
#include <limits.h>
#include <map>
#include <stack>
#include <queue>
#include <vector>
#include <set>
#include <string>
#define ll long long
#define ms(a) memset(a,0,sizeof(a))
#define pi acos(-1.0)
#define INF 0x3f3f3f3f
const double E=exp(1);
const int maxn=1e6+10;
using namespace std;
int main(int argc, char const *argv[])
{
	ios::sync_with_stdio(false);
	int n;
	cin>>n;
	ll ans=0;
	int N=n;
	int vis=1;
	while(N)
	{
		int res=N%10;
		if(res==0)
			ans+=n/(vis*10)*vis;
		else if(res==1)
		{
			ans+=n/(vis*10)*vis;
			ans+=n%vis+1;
		}
		else
		{
			ans+=(n/(vis*10)+1)*vis;
		}
		N/=10;
		vis*=10;
	}
	cout<<ans<<endl;
	return 0;
}