fork download
  1. #include <stdio.h>
  2.  
  3. int main(){
  4. int page;
  5. scanf("%d", &page);
  6.  
  7. int base = 1; // 현재 자릿수의 기준
  8. int total = 0; // 각 자릿수마다 특정 숫자가 등장하는 총 횟수
  9.  
  10. while (page / base != 0) {
  11. int quotient = page / (base * 10); // 현재 자릿수보다 왼쪽에 있는 숫자의 개수
  12. int remainder = page % (base * 10); // 현재 자릿수의 오른쪽 숫자
  13.  
  14. // 현재 자릿수보다 왼쪽에 있는 숫자의 개수를 이용하여 각 자릿수에서 특정 숫자가 등장하는 횟수를 계산
  15. total += quotient * base; // 현재 자릿수보다 왼쪽에 있는 숫자가 등장하는 횟수
  16.  
  17. // 현재 자릿수에서 특정 숫자가 등장하는 횟수 계산
  18. if (remainder / base == 1) {
  19. total += page % base + 1; // 현재 자릿수에서 특정 숫자가 등장하는 횟수
  20. } else if (remainder / base > 1) {
  21. total += base; // 현재 자릿수보다 왼쪽에 있는 숫자들이 특정 숫자로 모두 등장하는 경우
  22. }
  23.  
  24. base *= 10; // 다음 자릿수로 이동
  25. }
  26.  
  27. // 각 숫자의 등장 횟수 출력
  28. for (int i = 0; i < 10; i++) {
  29. int count = total; // 각 숫자의 등장 횟수
  30. if (i == 0) {
  31. count -= base / 10; // 첫 번째 자릿수에서 0이 등장하는 횟수는 제외
  32. }
  33. printf("%d ", count);
  34. }
  35.  
  36. return 0;
  37. }
  38.  
Success #stdin #stdout 0.01s 5308KB
stdin
999
stdout
200 300 300 300 300 300 300 300 300 300