51Nod 1009:1009 數字1的數量 (思維)
阿新 • • 發佈:2019-01-27
基準時間限制: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; }