정수 n이 있다고 가정하고 다음 작업을 수행한 후 n번째 정수를 반환해야 합니다. 정수 1에서 시작하여 9, 19, 29와 같이 9를 포함하는 정수를 제거합니다. 이제 다음과 같은 새로운 정수 시퀀스가 생깁니다. 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, ... 1이 첫 번째 정수임을 명심해야 합니다.
따라서 입력이 9와 같으면 출력은 10이 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
ret :=0
-
s :=1
-
n이 0이 아닌 동안 수행 -
-
ret :=ret + (n mod 9) * s
-
n :=n / 9
-
s :=s * 10
-
-
s :=s * 10
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예시
#include <bits/stdc++.h> using namespace std; typedef long long int lli; class Solution { public: int newInteger(int n) { int ret = 0; lli s = 1; while (n) { ret += (n % 9) * s; n /= 9; s *= 10; } return ret; } }; main(){ Solution ob; cout << (ob.newInteger(120)); }
입력
120
출력
143