Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 10의 거듭제곱으로 나눌 수 있는 숫자의 최소 제거 수를 K로 올림

<시간/>

문제 설명

두 개의 양의 정수 N과 K가 주어집니다. 제거 후 숫자가 10K로 나누어 떨어지도록 숫자 N에서 제거할 수 있는 최소 자릿수를 찾으십시오. 불가능한 경우 -1을 출력합니다.

예시

N =10203027이고 K =2이면 3자리를 제거해야 합니다. 3, 2, 7을 제거하면 숫자는 10200이 되고 102로 나누어 떨어집니다.

알고리즘

1. Start traversing number from end. If the current digit is not zero, increment the counter variable, otherwise decrement variable K
2. If K is zero, then return counter as answer
3. After traversing the whole number, check if the current value of K is zero or not. If it is zero, return counter as answer, otherwise return answer as number of digits in N –1
4. If the given number does not contain any zero, return -1 as answer

예시

#include <bits/stdc++.h>
using namespace std;
int getBitsToBeRemoved(int n, int k) {
   string s = to_string(n);
   int result = 0;
   int zeroFound = 0;
   for (int i = s.size() - 1; i >= 0; --i) {
      if (k == 0) {
         return result;
      }
      if (s[i] == '0') {
         zeroFound = 1;
         --k;
      } else {
         ++result;
      }
   }
   if (!k) {
      return result;
   } else if (zeroFound) {
      return s.size() - 1;
   }
   return - 1;
}
int main() {
   int n = 10203027;
   int k = 2;
   cout << "Minimum required removals = " <<
   getBitsToBeRemoved(n, k) << endl;
   return 0;
}

위의 프로그램을 컴파일하고 실행할 때. 다음 출력을 생성합니다.

출력

Minimum required removals = 3