function count_n($limit, $n) { if ($limit < $n) { return 0; } if ($limit == $n) { return 1; } $power = floor(log10($limit)); $unit = pow(10, $power); $high = floor($limit / $unit); $low = $limit % $unit; return $high * $power * $unit / 10 + (($high > $n)? $unit: (($high == $n)? 1 + $low: 0)) + count_n($low, $n); } echo count_n(100000000, 1); // 80000001
(define (count-n limit n) (if (< limit n) 0 (= limit n) 1 (letn (high (int ((string limit) 0)) low (int (1 (string limit))) power (int (log limit 10))) (+ (count-n low n) (* high power (pow 10 (- power 1))) (if (> high n) (pow 10 power) (= high n) (+ 1 low) 0))))) (println (count-n 100000000 1))