2016-03-13 3 views
0

Я сделал небольшую программу, чтобы определить длину предоставленного пользователем целого числа:Есть ли максимальная длина int, которую пользователь может ввести?

#include <iostream> 

using namespace std; 

int main() 
{ 
    int c=0; //counter for loop 
    int q=1; //quotient of number upon division 

    cout << "Hello Cerberus! Please enter a number." << endl; 
    cin >> q; 

    if(q > -10 && q < 10) 
    { 
     cout << "The number you entered is 1 digit long." << endl; 
    } 
    else 
    { 
     while(q != 0) 
     { 
      q=q/10; 
      c++; 
     } 

     cout << "The number you entered is " << c << " digits long." << endl; 
    } 
    return 0; 
} 

Она работает довольно хорошо, если число не становится слишком большим. Как только ввод будет длиной 13 цифр или около того, программа по умолчанию будет «Номер, который вы ввели, длиной 1 цифра» (он не должен даже представлять это решение, если оно не находится между -10 и 10).

Существует ли ограничение длины для целых чисел, вводимых пользователем, или это является показателем пределов памяти моего компьютера?

ответ

2

Это предел в архитектуре вашего компьютера. У каждого числового типа фиксированный верхний предел, так как тип описывает данные с фиксированным размером. Например, ваш int, вероятно, займет до четырех или восьми байтов в памяти (в зависимости от процессора, на основе ваших наблюдений, я бы сказал, первого), и существует так много комбинаций бит, которые могут быть сохранены так много байтов памяти.

Вы можете определить диапазон int на вашей платформе, используя std::numeric_limits, но лично я рекомендую придерживаться псевдонимами фиксированной ширины типа (например, int32_t, int64_t) и выбирать в зависимости от того из них имеют достаточный диапазон для вашего приложения.

В качестве альтернативы существуют так называемые библиотеки «bigint», которые по существу являются классами, обертывающими целые массивы и добавляющими умную функциональность, чтобы сделать сколь угодно большие значения, как если бы они были арифметических типов. Это, вероятно, слишком много для вас.

Только не искушайтесь использовать типы с плавающей точкой (float, double) для своих магических способностей; так же, как и с интегральными типами, их точность принципиально ограничена, но использование типов с плавающей точкой добавляет дополнительные проблемы и проблемы сверху.

Однако нет основополагающего ограничения на ввод пользователя. Это потому, что ваш поток преобразует текстовые символы, и ваш поток может в основном содержать столько текстовых символов, сколько вы могли себе представить. На этом уровне вы действительно ограничены доступной памятью.

+0

Если бы я хотел использовать int64_t для «д» бы я фраза это: #include #include с использованием патезраса; int main() { int c = 0; // counter for loop int64_t q = 1; // коэффициент числа при делении ... простой как это? – Cerberus

+0

@Cerberus: выглядит прилично. –

Смежные вопросы