fork(1) download
  1.  
  2. public class Main {
  3. public static void main(String[] args) {
  4. System.out.println(countNumbersContainingDigitDFrom1ToN(234,5));
  5. }
  6. static long countNumbersContainingDigitDFrom1ToN(long Number, int digit) {
  7. if (Number <= 9) {
  8. if (Number >= digit && digit > 0) return 1; //if d==0 we will not count this
  9. return 0;
  10. }
  11. long prefixNumber = Number / 10;
  12. long con = countNumbersContainingDigitDFrom1ToN(prefixNumber - 1, digit);
  13. long count = con * 10 + (prefixNumber - con);//count numbers containing digit from 0 to MaximumNumberLesserThanGivenNumber
  14. if (new Long(prefixNumber).toString().contains(digit + "")) {
  15. count += Number % 10 + 1;//each number from MaximumNumberLesserThanGivenNumber to Number contains this
  16. } else if (Number % 10 >= digit) {
  17. count++;//only one number from MaximumNumberLesserThanNumber to Number contains this
  18. }
  19. //as we count number from zero (if d==0 we have to decrease counter)
  20. if (digit == 0) return --count;
  21. return count;
  22. }
  23. }
Success #stdin #stdout 0.07s 380224KB
stdin
Standard input is empty
stdout
41