用 C++ 求出含有素數位數字的最大數


本教程中,我們將編寫一個程式,該程式找出小於 n 的具有素數位數的最大數。

我們來看一下解決此問題所需的步驟。

  • 編寫從 0 到 n 迭代的迴圈。
    • 如果當前數字不是素數。
      • 在數字小於 2 時,將 i 值減 1。如果 i 值為負,則將其設為 0。
      • 使用下一個最小的素數位數更新當前索引值。
      • 從此索引開始,將所有數字變為 7。
  • 返回 n。

示例

我們來看一下程式碼。

 線上演示

#include <bits/stdc++.h>
using namespace std;
bool isPrime(char c) {
   return c == '2' || c == '3' || c == '5' || c == '7';
}
void decrease(string& n, int i) {
   if (n[i] <= '2') {
      n.erase(i, 1);
      n[i] = '7';
   }else if (n[i] == '3') {
      n[i] = '2';
   }else if (n[i] <= '5') {
      n[i] = '3';
   }else if (n[i] <= '7') {
      n[i] = '5';
   }else {
      n[i] = '7';
   }
   return;
}
string getPrimeDigitsNumber(string n) {
   for (int i = 0; i < n.length(); i++) {
      if (!isPrime(n[i])) {
         while (n[i] <= '2' && i >= 0) {
            i--;
         }
         if (i < 0) {
            i = 0;
         }
         decrease(n, i);
         for (int j = i + 1; j < n.length(); j++) {
            n[j] = '7';
         }
         break;
      }
   }
   return n;
}
int main() {
   string n = "7464";
   cout << getPrimeDigitsNumber(n) << endl;
   return 0;
}

輸出

如果您執行以上程式碼,您將獲得以下結果。

7377

結論

如果您對本教程有任何疑問,請在評論部分說明。

更新日期: 09-4-2021

348 次瀏覽

開啟你的 職業生涯

完成課程即可獲得認證

入門
廣告