2010-12-02 36 views
0

J'ai par exemple le numéro long 12345678901 et je veux obtenir séparément chaque chiffre pour l'utiliser. J'ai essayé vraiment dur mais je ne l'ai pas fait si loin? Des idées?chiffres séparés d'un nombre long en C++

mais j'ai un problème dans tous les quand j'essaie ceux avec un nombre de 11 chiffres et plus (ce que je veux) mon programme cesse de fonctionner Je suis en cours d'exécution de mon programme en studio visuel dans d'autres cas -petits numéros - est très bien .. toute connexion avec le fait que mon numéro est long?

+0

duplication possible de [Fractionner un entier en ses chiffres C++] (http://stackoverflow.com/questions/4207696/split-an-integer-into-its-digits-c) –

Répondre

2

Cela vous donnera des chiffres dans la variable b.

long a = 12345678901; 
while(a > 0) { 
    long b = a % 10; 
    a /= 10; 
} 
+0

Np, content que ce soit utile! –

3
std::vector<int> digits; 

while(number > 0) 
{ 
    digits.push_back(number%10); //push the last digit in 
    number /= 10; //truncate the digit 
} 

std::reverse(digits.begin(), digits.end()); // the digits were in reverse order 
1

Une façon serait de convertir le nombre à une chaîne (pas sûr de ce que la méthode est pour cela, mais je sais que ces choses existent), puis accéder à chaque caractère de la chaîne une à la fois.

+0

Vous pouvez le faire avec la fonction itoa – user387049

+0

sprintf (myString, "% d", myNumber); –

+0

Yikes :) Pourquoi ne pas simplement 'boost :: lexical_cast (myNumber)'? Je pense que 'lexical_cast' pourrait faire partie de la bibliothèque standard en C++ 0x (il faudrait que je vérifie), ce qui rend cette approche encore plus facile. –

0
long residual= number; 
int base= 10; 

do 
{ 
    long digit= residual%base; 
    std::cout << digit << '\n'; 
    residual/= base; 
} while (residual!=0); 
0

Au lieu de calculer les chiffres, vous pouvez obtenir ce que vous voulez en le convertissant en une chaîne:

// This converts the binary representation of the long into a string. 
std::stringstream ss; 
ss << long_number; 
std::string number_as_string = ss.str(); 

// Then visit all the characters of the string. 
for (std::string::const_iterator it = number_as_string.begin(); 
    it != number_as_string.end(); 
    ++it) 
{ 
    std::cout << *it << std::endl; 
} 

Cela affichera les chiffres, par exemple, si vous avez 12 345:

1 
2 
3 
4 
5 

Ainsi vous pouvez traiter chacun d'entre eux en accédant à l'itérateur *it comme le code ci-dessus.