C++ 中,求一个数能被 10 的 K 次方整除的最小位数

c++server side programmingprogramming

问题描述

给定两个正整数 N 和 K。求能从 N 中移除的最小位数,使得移除后的数字能被 10K 整除。如果不能,则输出 -1。

示例

如果 N = 10203027,K = 2,则需要移除 3 位数字。如果移除 3、2 和 7,则数字变为 10200,能被 102 整除

算法

1. 从末尾开始遍历数字。如果当前数字不为零,则增加计数器变量,否则减少变量 K。
2. 如果 K 为零,则返回计数器作为答案。
3. 遍历整个数字后,检查 K 的当前值是否为零。如果为零,则返回计数器作为答案。否则,返回 N - 1 中的位数作为答案。
4. 如果给定数字不包含零,则返回 -1 作为答案。

示例

#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

相关文章