51nod 1009 數字1的數量

2021-07-15 02:45:43 字數 1219 閱讀 3677

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首先這是乙個規律的問題 ,

比如1111

首先 我們要知道1000 含有的數字1的個數是301個

因為個位,十位,百位,每位提供了100個1的數量, 千位數提供了乙個1的數量

然後 後面還有111 從1000到1111 又多出了111個1 所以在1111中 千位段提供的1的數量是301+111;

然後 111 中 100含有21個1的數量, 11 多出了11個1的數量 所以百位段提供的是 21+11;

然後 11 10提供了2個1,後面個為1為十位多提供了乙個1 所以十位段是 2+1;

個位段 1

所以最後的數量是

301+111+21+11+2+1+1 =448;

邏輯就是這樣

如果2000呢

2000含有1的數量是1600個

首先 1 到999提供了 300個1

從1000 到2000中

個位,十位,百位 各提供了100個1

但是千位提供了1000個1

所以 2000 就是 300+1000+300;

那麼3000就是 300+1000+300+300;

規律就是這樣

貼**防止自己忘

#include

#include

#include

using

namespace

std;

int main()

long

long y=i;

//coutlong

long s=0;

while(x>0)

else

if(x/l>1)

x=x%l;

l=l/10;

y--;

}cout

<}

}

51 nod 1009 數字1的數量

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 ...

51nod 1009 數字1的數量

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 ...

51nod 1009 數字1的數量

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...