51Nod 1009 數字1的數量 數字dp

2021-08-25 16:52:39 字數 1111 閱讀 6586

給定乙個十進位制正整數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的個數

sample input

12
sample output

5
用dp的思想,就是要從每一位考慮 1 的個數,而且要分不同的情況:例如  38104

1,當該位大於 1 的時候,此時只考慮比它高的位數就行,就是 (38104 / 10 + 1) = 3811

2,當該位為 0 的時候,例如十位,此時和上面一樣,不過不用加一,就是 (38104 / 100 × 10)= 3810

3,當該位為 1 的時候既要高位的也要比它低位的,就像百位, 就是(104 % 100 + 1)= 5,

還要考慮它的高位 (38104 / 1000 × 100) = 3800。

計算千位和萬位就是,((38104 / 10000 +  1) × 1000) =  4000,((38104 / 100000 + 1)× 10000)= 100000

結果就是3811 + 3810 + 5 + 3800 + 4000 + 100000 = 25426

#includevoid qh(int n)

else

ans += (n / (num * 10) + 1) * num;

st /= 10;//把計算過的除去

num *= 10;//代表遞增的位數

} printf("%d\n",ans);

}int main()

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

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