fork download
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. using namespace std;
  5.  
  6. void countDigits(long long N) {
  7. vector<long long> digitCount(10, 0); // Mảng lưu số lần xuất hiện của các chữ số từ 0 đến 9
  8. long long factor = 1; // Biến để xử lý từng vị trí chữ số
  9. int currentDigit, lowerDigits, higherDigits;
  10.  
  11. while (N / factor > 0) {
  12. lowerDigits = N % factor; // Các chữ số nhỏ hơn vị trí hiện tại
  13. currentDigit = (N / factor) % 10; // Chữ số ở vị trí hiện tại
  14. higherDigits = N / (factor * 10); // Các chữ số lớn hơn vị trí hiện tại
  15.  
  16. // Tính số lần xuất hiện của các chữ số từ 0 đến 9 tại vị trí hiện tại
  17. for (int i = 0; i < 10; i++) {
  18. if (i < currentDigit) {
  19. digitCount[i] += (higherDigits + 1) * factor;
  20. } else if (i == currentDigit) {
  21. digitCount[i] += higherDigits * factor + lowerDigits + 1;
  22. } else {
  23. digitCount[i] += higherDigits * factor;
  24. }
  25. }
  26.  
  27. // Chữ số 0 không bao giờ xuất hiện ở vị trí đầu tiên
  28. digitCount[0] -= factor;
  29.  
  30. factor *= 10; // Chuyển sang vị trí tiếp theo
  31. }
  32.  
  33. // In ra kết quả
  34. for (int i = 0; i < 10; i++) {
  35. cout << i << " " << digitCount[i] << endl;
  36. }
  37. }
  38.  
  39. int main() {
  40. long long N;
  41. cin >> N;
  42.  
  43.  
  44. countDigits(N);
  45.  
  46. return 0;
  47. }
  48.  
Success #stdin #stdout 0s 5288KB
stdin
123456
stdout
0 58985
1 93553
2 63553
3 59553
4 59053
5 58993
6 58986
7 58985
8 58985
9 58985