#include using namespace std; // ========================================================= int somme(int nb) { int retour(0); // tant que on peut diviser par 10 // chaque fois on divise par 10 while (nb > 0) { retour += nb % 10; nb /= 10; } return retour; } // ========================================================= int produit(int nb) { int retour(1); while (nb > 0) { retour *= nb % 10; nb /= 10; } return retour; } // ========================================================= bool somme_est_egale_produit(int nb) { bool retour; retour = (somme(nb) == produit(nb)); // la comparaison de la somme et du produit return retour; // On peut bien sûr réduire tout ça en: // return somme(nb) == produit(nb); } // ============================================================ void tester(int n) { cout << "somme(" << n << ") = " << somme(n) << endl; } // ========================================================= int main() { // PENSEZ AUX TESTS !!!! for (auto n : { 123, 10, 22, 1, 0 }) { // on verra les tableaux la semaine prochaine, mais l'idée principale ici est de penser aux tests tester(n); } // Algorithme principal // tant que on n'a pas trouvé 20 nombres // OU : // pour de 1 à 20 candidats, à partir de 10 int combien_on_en_a(0); // ...à partir de 10 int nombre_a_tester(10); while (combien_on_en_a < 20) { // ...dont la somme est égale au produit... if (somme_est_egale_produit(nombre_a_tester)) { ++combien_on_en_a; cout << nombre_a_tester << endl; } ++nombre_a_tester; } return 0; }