Как я могу подсчитать количество цифр в числе до 1000 цифр в C / C ++

Как я могу подсчитать количество цифр в числе до 1000 цифр на языках C или C ++

#include <stdio.h>

int main()
{
    int num,counter=0;

    scanf("%d",&num);

    while(num!=0){
        num/=10;
        counter++;
    }

    printf("%d\n",counter);
}

Этот код работает только с числами до 10 цифр - не знаю почему.


person MohamedAlNajjar    schedule 03.07.2014    source источник
comment
Потому что тип int на современных процессорах не может вместить такое большое число.   -  person Captain Obvlious    schedule 04.07.2014
comment
прочтите это как строку   -  person Kevin Seifert    schedule 04.07.2014
comment
@CaptainObvlious, я не знаю, увидим ли мы когда-нибудь int, содержащий 1000 цифр.   -  person chris    schedule 04.07.2014
comment
Спасибо. Но как я могу подсчитать цифры в строке?   -  person MohamedAlNajjar    schedule 04.07.2014
comment
@ user3803192, если известно, что все символы являются цифрами, s.size().   -  person chris    schedule 04.07.2014
comment
@TemplateRex 512bits хранит только около 150 цифр (основание 10)   -  person Fermat's Little Student    schedule 04.07.2014
comment
@TemplateRex, все равно всего как 150 цифр, но ладно, ладно. Я не знаю, что мы когда-нибудь увидим обычное int, содержащее 1000 цифр.   -  person chris    schedule 04.07.2014
comment
@chris извините, я действительно неправильно понял, 1000 цифр - это безумие   -  person TemplateRex    schedule 04.07.2014


Ответы (1)


Поскольку большинство компьютеров не могут содержать целое число, состоящее из 1000 цифр, вам придется либо обрабатывать ввод как строку, либо использовать библиотеку Big Number. Попробуем первое.

При обработке ввода как строки каждая цифра представляет собой символ в диапазоне от '0' до '9' включительно.

Итак, это сводится к подсчету символов:

std::string text;
cin >> text;
const unsigned int length = text.size();
unsigned int digit_count = 0;
for (i = 0; i < length; ++i)
{
  if (!std::isdigit(text[i]))
  {
    break;
  }
  ++digit_count;
}
cout << "text has " << digit_count << "digits\n";
person Thomas Matthews    schedule 03.07.2014
comment
Вместо цикла вы можете использовать std::find_if_not и std::distance, чтобы получить счет. - person chris; 04.07.2014
comment
@MohamedAlNajjar, эту ошибку можно решить, изучив программу hello world. - person chris; 04.07.2014