Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ตัวเลขมากที่สุดที่มีหลักเป็นเลขเฉพาะใน C++

โจทย์

ในบทช่วยสอนนี้ เราจะเขียนโปรแกรมหาตัวเลขมากที่สุดที่มีหลักเป็นเลขเฉพาะซึ่งน้อยกว่า n

มาดูขั้นตอนการแก้ปัญหา

  • เขียนลูปที่วนรอบจาก 0 ถึง n
    • ถ้าหลักปัจจุบันไม่ใช่เลขเฉพาะ
      • ขณะที่หลักน้อยกว่าหรือเท่ากับ 2 ให้ลดค่า i ลง ถ้าค่า 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

สรุป

หากคุณมีคำถามในบทช่วยสอนนี้ ให้กล่าวถึงในส่วนความคิดเห็น