LES NOMBRES DE KAPREKAR

cs_Lucky92 Messages postés 180 Date d'inscription mercredi 22 décembre 2004 Statut Membre Dernière intervention 16 août 2012 - 17 nov. 2007 à 12:13
Abrahamz Messages postés 14 Date d'inscription vendredi 22 août 2003 Statut Membre Dernière intervention 9 décembre 2008 - 18 nov. 2007 à 10:30
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/44739-les-nombres-de-kaprekar

Abrahamz Messages postés 14 Date d'inscription vendredi 22 août 2003 Statut Membre Dernière intervention 9 décembre 2008
18 nov. 2007 à 10:30
C'est du c++ que tu me fait là non ? Je touche pas trop au c++ :). Auparavant je l'avait fait avec des opérations sur les nombres (genre des modulos et des divisions par 10 pour obtenir le i-ème chiffre).

Par contre oui tu as raison pour le commentaire, c'est bien n1 - n2 (c'est ce que j'ai mis dans la source mais j'ai pas un labsus dans la présentation).

merci !
cs_Lucky92 Messages postés 180 Date d'inscription mercredi 22 décembre 2004 Statut Membre Dernière intervention 16 août 2012 2
17 nov. 2007 à 12:13
C'est n' = n1 - n2 et non n' = n1 + n2 , sinon ça converge pas.

Moi aussi j'aime bien ce genre de futilité - sans doute un problème créé pendant la guerre froide pour déconcentrer les scientifiques occidentaux ;>

Quant à tes scrupules à utiliser la fonction itoa() et ton envie d'aller au-delà de 4 chiffres, je te propose d'alléger ton source avec le code standard suivant :

std::string i2s( long n )
{
std::ostringstream oss ;
oss << n ;
return oss.str() ;
}
long s2i( const std::string& s )
{
long n ( 0 ) ;
std::istringstream iss ( s ) ;
iss >> n ;
return n ;
}
long algo_kaprekar( long n )
{
std::string n1 ( i2s( n ) ) ;
std::sort( n1.begin() , n1.end() , std::greater<char>() ) ;

std::string n2 ( i2s( n ) ) ;
std::sort( n2.begin() , n2.end() , std::less<char>() ) ;

return s2i( n1 ) - s2i( n2 ) ;
}

C'est un sujet trés intéressant.
Rejoignez-nous