CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Code C++ ne fonctionne pas

Rem110
Rem110
Niveau 7
09 août 2015 à 18:32:58

Salut !

Je débute un peu en algo et j'ai donc commencé les exercices du project Euler
J'en suis au 3 qui m'a l'air assez facile : https://projecteuler.net/problem=3
Cependant mon code ne marche pas, c'est à dire que la console s'ouvre et affiche "0" sans rien faire.

Mon code :

#include <iostream>

using namespace std;

bool isPrimary(int number);

int main()
{
    int divider = 0;
    int number = 600851475143;
    int i = 0;

    for (i = 0; i < number; i++)
    {
        if (isPrimary(i) && number % i == 0)
        {
            divider = i;
        }
    }

    cout << divider;
}

bool isPrimary(int number)
{
    int i = 0;

    for (i = 0; i < number; i++)
    {
        if (number % i == 0)
        {
            return false;
        }
    }

    return true;
}

Merci d'avance ! :)

Edit : J'utilises Code::Blocks 13.12 MINGW

Message édité le 09 août 2015 à 18:36:38 par Rem110
Candystand
Candystand
Niveau 10
09 août 2015 à 18:36:34

Ta variable number ne peut être un int car la valeur qu'elle contient est bien trop grande. Tu dois donc déclarer ta variable en tant que long double

Xavier591
Xavier591
Niveau 5
09 août 2015 à 18:37:44

Je confirme mon VDD. J'ai dit de la merde précisément, mais je ne sais quand même pas pourquoi t'as cette ligne :

bool isPrimary(int number);
Candystand
Candystand
Niveau 10
09 août 2015 à 18:38:26

Le 09 août 2015 à 18:37:44 Xavier591 a écrit :
Je confirme mon VDD. J'ai dit de la merde précisément, mais je ne sais quand même pas pourquoi t'as cette ligne :

bool isPrimary(int number);

c'est le prototype de sa fonction, il cherche juste à savoir si le nombre (number) est un facteur premier (true) ou pas (false)

Message édité le 09 août 2015 à 18:38:38 par Candystand
Xavier591
Xavier591
Niveau 5
09 août 2015 à 18:39:23

Beh le prototype t'as pas besoin d'en mettre un si t'es dans ton fichier principal. Si ?

Candystand
Candystand
Niveau 10
09 août 2015 à 18:39:48

T'es pas obligé oui

Xavier591
Xavier591
Niveau 5
09 août 2015 à 18:40:13

Surtout directement dans le .cpp ça ne marche pas il me semble ?

Candystand
Candystand
Niveau 10
09 août 2015 à 18:41:01

Y a pas de raison pour que ça marche pas

Rem110
Rem110
Niveau 7
09 août 2015 à 18:46:17

Merci pour vos réponse (j'avais jamais utilisé de nombres aussi grands ^^)

Rem110
Rem110
Niveau 7
09 août 2015 à 19:04:23

Bon, du coup, j'ai un autre problème ^^
J'ai fait quelques recherches et même l'int le plus grand (unsigned long int) ne contient pas le nombre demandé :(
Mais le float, et certains double le peuvent
Cependant, le modulo serait apparement réservé aux integers
Je souhaiterai donc comparer le resultat de la division a son "intvalue", mais je ne connais pas les casts en C++
Quelqu'un pour me donner la syntaxe/m'aider ?

Candystand
Candystand
Niveau 10
09 août 2015 à 19:13:52

Le 09 août 2015 à 19:04:23 Rem110 a écrit :
Bon, du coup, j'ai un autre problème ^^
J'ai fait quelques recherches et même l'int le plus grand (unsigned long int) ne contient pas le nombre demandé :(
Mais le float, et certains double le peuvent
Cependant, le modulo serait apparement réservé aux integers
Je souhaiterai donc comparer le resultat de la division a son "intvalue", mais je ne connais pas les casts en C++
Quelqu'un pour me donner la syntaxe/m'aider ?

met un long double comme je t'ai dit,

Et pour le modulo, utilise la fonction fmod() http://en.cppreference.com/w/cpp/numeric/math/fmod

Rem110
Rem110
Niveau 7
09 août 2015 à 19:15:47

Merci encore, j'avais mal lu ton message :)

Rem110
Rem110
Niveau 7
09 août 2015 à 20:34:25

Bon, j'ai réussi ^^

Pour ceux qui seraient bloqués comme moi, il faut savoir que ma méthode prend beaucoup trop de temps
Cependant, j'ai écrit un autre code plus rapide. Voilà le principe : tout entier est un produit de nombres premiers. C'est à dire qu'après avoir divisé un nombre par des entiers, on finit par aboutir à un nombre divisible uniquement par lui même et 1 (donc premier)

L'idée est simple : on divise un nombre par les plus petits diviseurs possibles (on commence à 2 évidemment) :

  1. Si la division est possible, on divise le nombre et on ramène le diviseur à 2
  2. Sinon, on augmente le diviseur jusqu'à atteindre une division possible ou le nombre lui-même (qui sera donc notre plus grand nombre premier)

Voilà le code :

#include <iostream>

using namespace std;

int main()
{
    long long testDivider = 2;
    long long largestDivider = 0;
    long long number = 600851475143;

    while (testDivider != number)
    {
        if (number % testDivider == 0)
        {
            number /= testDivider;
            testDivider = 2;
        }

        else
            testDivider++;
    }

    largestDivider = testDivider;

    cout << largestDivider;
}

En espérant avoir aidé certains ^^

Sous forums
  • Aide à l'achat Mac
  • Internet
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment