Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 29, средняя оценка - 4.79
azazelpj
0 / 0 / 0
Регистрация: 30.11.2008
Сообщений: 8
#1

Предел int - C++

17.12.2008, 21:15. Просмотров 3892. Ответов 7
Метки нет (Все метки)

Есть такая игра, Lineage II.
Так вот там если покупать или продавать, что либо, то оно не должно превышать число
2147483648.

У меня задача немного иная, нужно при сложении выдавать ошибку если число больше
2147483648 (9999999999999999999999999999999999999999999999999999999999999999999) и выдавать ошибку если я задал в cin равным или больше 2147483648.

Возник вопрос, как написать такой код для консоли (cmd), я сделал набросок, но мне это не подходит. Если число больше и если меньше, то код выдает Error.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
using namespace std;
 
int main()
{
    int a;
    int b = 2147483648;
    cout<<"Vvod A:";
    cin >> a;
    cout<<"\n";
 
 
if (a => b)
cout<<"Error";
 
else 
cout<<"a = "<<a; 
cout<<"\n";
}
Если я пишу код немного по другому, то выдает число -858993460
Что посоветуете?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.12.2008, 21:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Предел int (C++):

Предел int или что то еще ? - C++
Задание: Определить входит ли введенная цифра в заданное натуральное число. Вот что у меня получилось: #include &lt;iostream.h&gt; void...

Error LNK2019: unresolved external symbol "public: __thiscall Vector<int>::Vector<int>(int,int,int)" (?0?$Vec - C++
Вот есть заголовочный файл // Заголовочный файл Vector.h #ifndef VECTOR_H #define VECTOR_H #include &lt;iostream&gt; using...

Ошибка при компиляции error: cannot convert ‘int (*)[5]’ to ‘int**’ for argument ‘1’ to ‘void Replase(int**)' - C++
#include &lt;iostream&gt; #include &lt;ctime&gt; #include &lt;iomanip&gt; #include &lt;cstdlib&gt; #define row 5 #define col 5 using namespace...

В каком случае надо начинать с int main() или с int _tmain( int argc, _TCHAR* argv[] ) и т.д.? - C++
Не понимаю, с чего начинать. Заранее спс.

[Linker error] undefined reference to `sterling(int, int, int)' - C++
#include &lt;iostream&gt; using namespace std; int sterling(int,int,int); int sterling(int,int); int sterling(int); int main() { ...

[Linker Error] Unresolved external 'Sort(int near*near ,int, int) - C++
не могу понять в чем ошибка при компиляции ошибок не выдает при запуске программы - выдает эту ошибку Unresolved external 'Sort(int...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
AleXX
3 / 0 / 1
Регистрация: 17.12.2008
Сообщений: 10
17.12.2008, 23:07 #2
Брать не int, а long
А еще лучше double
int 32тыс с чем то только
А 2147483648 это предел long
Больше не взять
0
azazelpj
0 / 0 / 0
Регистрация: 30.11.2008
Сообщений: 8
17.12.2008, 23:21  [ТС] #3
Вопрос стоял немного другой, нужно взять число больше чем нужно, а именно (9999999999999999999999) и при нажатии ентер вывести ошибку.
0
AleXX
3 / 0 / 1
Регистрация: 17.12.2008
Сообщений: 10
17.12.2008, 23:31 #4
тогда вводить строкой.
Если по задани. можно вводить только числа,то достаточно чтобыдлинна строки >10 тогда ошибка.
Если меньше, то все норм. Если равно, то строку через atof() перевести и сравнить с исходным.
0
ABTOP
36 / 36 / 2
Регистрация: 09.06.2008
Сообщений: 324
17.12.2008, 23:33 #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
using namespace std;
int main()
{
 int a;
 cout<<"Vvod A:";
 cin >> a;
 cout<<"\n";
 if (a >= 2147483648)
    cout<<"Error";
 else 
    cout<<"a = "<<a; 
 cout<<"\n";
 return 0;
}
вот работает правильно...
0
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,370
17.12.2008, 23:39 #6
Цитата Сообщение от AleXX Посмотреть сообщение
int 32тыс с чем то только
А 2147483648 это предел long
Больше не взять
Предел int, вообще говоря, зависит от разрядности целевой платформы. 32767 - это только для 16-разрядной платформы.
А вообще говоря, существует еще unsigned long long, для которого предел 2^64 или
18446744073709551615. Для еще больших чисел необходимо применять длинную целочисленную арифметику. А предложение использовать double или atof() при работе с денежными величинами - (censored). Ни в коем случае так нельзя делать. Только целочисленные вычисления и никак иначе.
0
azazelpj
0 / 0 / 0
Регистрация: 30.11.2008
Сообщений: 8
18.12.2008, 00:00  [ТС] #7
Эммм... а почему так не работает?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using namespace std;
 
int main()
{
    int a;
    int b = 2147483648;
    cout<<"Vvod A:";
    cin >> a;
    cout<<"\n";
 
 
if (a >= b)
cout<<"Error";
 
else 
cout<<"a = "<<a; 
cout<<"\n";
return 0;
 
}
Если вместо 2147483648 написать 2147483647, то в итоге ( даже если написать букву ) получится -858993460.
Почему так выходит?
0
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
18.12.2008, 00:02 #8
с double
C++
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
 
main()
{
    double a;
        
    scanf("%lf", &a);
    if (a > 2147483648.0)
        printf("error: a = %.0lf\n", a);
    return 0;
}
максимум в long int может поместиться 32 бита, в signed long int тоже но старший (самый левый) бит показывает знак числа, а остальное остаётся для самого числа, то есть 31 бит под число остаётся 2147483647,5 максимальное

11111111 11111111 11111111 11111111

sizeof(double) у меня = 8 байт, т.е. это 64 бита, потому там может поместиться 1.84467440737e+19 число

long int и signed long int одно и то же по-умолчанию, есть ещё unsigned long int, вот у него старший бит считается не знаковым а просто как часть остального числа поэтому в таких числах нет отрицательных значений (они есть но не рассматриваются как отрицательные) но благодаря этому число увеличивается до 4294967295
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.12.2008, 00:02
Привет! Вот еще темы с ответами:

int main() и int _tmain(int argc, _TCHAR* argv[]) - C++
При создании нового консольного приложения Microsoft Visual С++ 2010 Express создает начальный шаблон #include &quot;stdafx.h&quot; int...

Написать функцию типа Beaty(int iA, int iB, int *pc) - C++
Задание: Написать функцию типа Beaty(int iA, int iB, int *pc); для выражения (iA+iB)/(iA*iB). Помогите решить!

Функции float average(int arrray[],int from,int to) - C++
Напишите код функции float average(int arrray,int from,int to). Возвращаемым значением функции должно быть среднее значение элементов...

Напишите функцию f(int& m1, int& m0, int N), которая воз- вращает первую и последнюю цифры двузначного натурального числа N - C++
Напишите функцию f(int&amp; m1, int&amp; m0, int N), которая воз- вращает первую и последнюю цифры двузначного натурального числа N. Решение. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
18.12.2008, 00:02
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru