Vous dépassez la limite des 32 bits non signés ... votre nombre de 11 chiffres ou plus dépasse 0xFFFFFFFF, et ainsi de suite.
Vous devez utiliser soit unsigned long long
o double
pour votre number1
variable :
#include <iostream>
#include <cstdlib>
#include <cmath>
int
main ( int argc, char * argv[] )
{
unsigned long long num; // or double, but note comments below
std::cin >> num;
std::cout << "Number of digits in " << num << " is " << ( (int) std::log10 ( num ) + 1 ) << std::endl;
return 0;
}
Ces grands nombres seront imprimés en notation scientifique par défaut lorsque vous les enverrez à l'adresse suivante std::cout
si vous choisissez d'utiliser double
en tant que type de données, ce qui vous permettra de procéder à une mise en forme. Si vous utilisez un unsigned long long
à la place, ils s'imprimeront tels qu'ils ont été saisis, mais vous devez être sûr que votre plateforme supporte unsigned long long
.
EDIT : Comme mentionné par d'autres, l'utilisation de valeurs à virgule flottante a d'autres implications à prendre en compte, et n'est très probablement pas ce que vous essayez d'obtenir en fin de compte. A ma connaissance, le type d'intégrale sur une plateforme qui donne la plus grande valeur positive est unsigned long long
En fonction des valeurs avec lesquelles vous souhaitez travailler, voyez si vous pouvez les utiliser.