Вы бежите за 32-разрядную границу без знака ... ваше число из 11 или более цифр превышает 0xFFFFFFFF, и поэтому оно повторяется.
Вам необходимо использовать либо unsigned long long
, либо double
дляваша number1
переменная:
#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;
}
Эти большие числа будут напечатаны в научной нотации по умолчанию при отправке их на std::cout
, если вы решите использовать double
в качестве типа данных, поэтому вы захотитебросить некоторое форматирование там.Если вместо этого вы используете unsigned long long
, они будут печататься так, как они были введены, но вы должны быть уверены, что ваша платформа поддерживает unsigned long long
.
РЕДАКТИРОВАТЬ: Как уже упоминалось, использование значений с плавающей запятой имеетдругие последствия, чтобы рассмотреть, и, скорее всего, не то, что вы в конечном итоге пытаетесь достичь.AFAIK, интегральный тип на платформе, который дает наибольшее положительное значение, составляет unsigned long long
, поэтому в зависимости от значений, с которыми вы хотите работать, посмотрите, доступен ли он для использования.