fork download
  1. #include <iostream>
  2.  
  3. const int kThreeNum = 3;
  4. const int kSixNum = 6;
  5. const int kNineNum = 9;
  6.  
  7. int countDigits(int n, int x)
  8. {
  9. int count = 0;
  10. int factor = 1;
  11.  
  12. while (factor <= n)
  13. {
  14. int lower = n % factor;
  15. int current = (n / factor) % 10;
  16. int higher = n / (factor * 10);
  17.  
  18. if (current > x)
  19. {
  20. count += (higher + 1) * factor;
  21. }
  22. else if (current == x)
  23. {
  24. count += higher * factor + (lower + 1);
  25. }
  26. else
  27. {
  28. count += higher * factor;
  29. }
  30.  
  31. factor *= 10;
  32. }
  33.  
  34. return count;
  35. }
  36.  
  37. int countClapsInRange(int startNum, int finishNum, int x)
  38. {
  39. return countDigits(finishNum, x) - countDigits(startNum - 1, x);
  40. }
  41.  
  42. int main()
  43. {
  44. int startNum = 0, finishNum = 0;
  45. std::cin >> startNum >> finishNum;
  46.  
  47. int ret = countClapsInRange(startNum, finishNum, kThreeNum) +
  48. countClapsInRange(startNum, finishNum, kSixNum) +
  49. countClapsInRange(startNum, finishNum, kNineNum);
  50.  
  51. std::cout << ret;
  52.  
  53. return 0;
  54. }
  55.  
Success #stdin #stdout 0.01s 5280KB
stdin
999999 10000000
stdout
19200006