How to check if number can be made prime by deleting a single digit in C++

1 Answer

0 votes
#include <iostream> 
#include <sstream> 
#include <cmath> 
  
unsigned int remove_the_N_digit(unsigned int num, unsigned int N) {
    std::stringstream ss;  
    ss << num;  
         
    std::string s;  
    ss >> s;  
         
    s.erase(s.begin() + N); 
         
    std::stringstream().swap(ss);
    ss << s;
         
    ss >> num;
    
    std::cout << num << "\n";  
      
    return num;
}
   
bool isPrime(int n) {
    if (n == 0) return false;
    if (n == 1) return false;
    
    for (int i = 2; i <= sqrt(n); i++) {
        if (n % i == 0) {
            return false;
        }
    }
      
    return true;
}
  
int main(void) {
    unsigned int n = 78919;
    unsigned int total_digits = (int)log10(n) + 1;
 
    int i = 0;
    while (i < total_digits) {
        int tmp = remove_the_N_digit(n, i);
        if (isPrime(tmp)) {
            std::cout << "yes number = " << tmp;
            break;
        }
        i++;
    }
}
  
  
    
/*
run:
    
8919
7919
yes number = 7919
 
*/

 



answered Jan 16, 2024 by avibootz
...