fork download
  1. const fs = require("fs");
  2.  
  3. const input = fs.readFileSync(0, "utf8").trim().split(/\s+/);
  4. let a = BigInt(input[0]);
  5. let b = BigInt(input[1]);
  6.  
  7. function countDigitUpTo(n, d) {
  8. if (n < 0n) return 0n;
  9.  
  10. let total = 0n;
  11. let factor = 1n;
  12.  
  13. while (factor <= n) {
  14. const tenFactor = factor * 10n;
  15. const high = n / tenFactor;
  16. const cur = (n / factor) % 10n;
  17. const low = n % factor;
  18.  
  19. if (cur > d) total += (high + 1n) * factor;
  20. else if (cur === d) total += high * factor + (low + 1n);
  21. else total += high * factor;
  22.  
  23. factor *= 10n;
  24. }
  25. return total;
  26. }
  27.  
  28. function count369UpTo(n) {
  29. if (n < 0n) return 0n;
  30. return (
  31. countDigitUpTo(n, 3n) +
  32. countDigitUpTo(n, 6n) +
  33. countDigitUpTo(n, 9n)
  34. );
  35. }
  36.  
  37. const result = count369UpTo(b) - count369UpTo(a - 1n);
  38. console.log(result.toString());
  39.  
Success #stdin #stdout 0.06s 40736KB
stdin
999999 10000000
stdout
19200006