수 n이 있다고 가정하면 n보다 작거나 같은 모든 음수가 아닌 숫자에 나타나는 숫자 1의 총 수를 계산해야 합니다. 따라서 입력이 15이면 출력은 8이 됩니다. 1을 포함하는 숫자는 [1,10,11,12,13,14,15]이므로 8개의 1이 있기 때문입니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
렛 :=0
-
i를 초기화하기 위해 :=1, i <=n일 때 i =i * 10 do −
-
a :=n / i, b :=n mod i, x :=a mod 10
-
x가 1과 같으면
-
레트 =레트 + (a / 10) * 나는 + (b + 1)
-
-
그렇지 않으면 x가 0과 같을 때 -
-
렛 =렛 + (a / 10) * i
-
-
그렇지 않으면
-
렛 =렛 + (a / 10 + 1) * i
-
-
-
리턴 렛
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
#include <bits/stdc++.h> using namespace std; class Solution { public: int countDigitOne(int n) { int ret = 0; for(long long int i = 1; i <= n; i*= (long long int)10){ int a = n / i; int b = n % i; int x = a % 10; if(x ==1){ ret += (a / 10) * i + (b + 1); } else if(x == 0){ ret += (a / 10) * i; } else { ret += (a / 10 + 1) *i; } } return ret; } }; main(){ Solution ob; cout << (ob.countDigitOne(15)); }
입력
15
출력
8