階梯數字
阿明最近在學習程式語言,他對一些特別的正整數很有興趣,他發現一些十進數的每一位數已排好順序,從高位數往低位數看過去,每一位數字只會相等或變大,例如:\(9\)、\(234\)、\(777\)、\(11222233\) 等數字都有這性質,他稱這些數字為階梯數字。
給定一正整數 \(N\),阿明想知道不大於 \(N\) 的階梯數字總共有幾個,請注意本題只算正整數,所以 \(0\) 不算階梯數字,而且階梯數字不會以 \(0\) 開始。請幫阿明寫計算階梯數字的個數。
提示:對於 \(N\) 不大的情形,例如 \(100000\),我們可以枚舉每一個不超過 \(N\) 的數字來判斷。對於 \(N\) 很大的時候,就需要比較快速的方法了。我們知道所有的一位數 \(1\sim 9\) 都是階梯數字,如果要計算 \(D\) 位數的階梯數字總數,我們可以依據最高位數字分成 \(9\) 類,然後根據\((D - 1)\)位的 \(9\) 類階梯數字總數來計算。
輸入格式
一個正整數 \(N\)。
- \(1\leq N\leq 10^{18}\)
輸出格式
輸出不大於 N 的階梯數字總個數。
範例輸入1
25
範例輸出1
22
範例輸入2
23456
範例輸出2
1365
說明
在範例輸入 \(1\) 中,不大於 \(N\) 的階梯數字分別為 \(1\sim 9\), \(11\sim 19\), \(22\sim25\),故最終輸出 \(22\)。
子題
#No. | 額外限制 | 分數 |
---|---|---|
1 | 範例測資 | 0 |
2 | \(N \leq 10^5\) | 30 |
3 | \(N = a*10^b\),\(a\) 與 \(b\) 均為整數,且 \(1 \leq a \leq 9\),\(10 \leq b \leq 17\) | 20 |
4 | \(N \leq 10^{18}\) | 50 |
评论