C++ 中將數字中移除的次數最少化,以確保數字可以被 10 的 K 次冪整除
問題陳述
給定兩個正整數 N 和 K。找出從數字 N 中可以移除的最小數字個數,以便移除後該數字可以被 10K 整除。如果不可能,則列印 -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
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP