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

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

Войти
Регистрация
Восстановить пароль
 
Alejo
0 / 0 / 0
Регистрация: 26.09.2012
Сообщений: 38
#1

Предел int или что то еще ? - C++

16.10.2012, 15:46. Просмотров 687. Ответов 13
Метки нет (Все метки)

Задание: Определить входит ли введенная цифра в заданное натуральное число.
Вот что у меня получилось:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream.h>
void main()
{
start:
    int a,b,x,q=1,z=0;
    cout<<"Enter A (chislo)"<<endl;
    cin>>a;
    cout<<"Enter B (cifra)"<<endl;
    cin>>b;
    //работает только с 9-ти значными числами
    while(q<a)
    {
        q=q*10;
        x=(a%q)/(q/10);
        if(x==b)
        {
            cout<<"Da"<<endl;
            z=1;
            break;
        }
    }
    if(z!=1)
    {
        cout<<"Net"<<endl;
    }
    goto start;
}
Проблема в том, что когда я ввожу число больше 9-ти знаков, программа все время выдает "да". Может быть это связано с превышением придела int ? Как с этим бороться ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.10.2012, 15:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Предел int или что то еще ? (C++):

Conversion from 'size_t' to 'int' и еще кое-что - C++
cout &lt;&lt; &quot;Vvedite slovo: &quot;; string word; cin &gt;&gt; word; char temp; int i; int j; for (j=0, i=word.size() -...

int[][] или int[] - что быстрее? - C++
Везде вижу, что лучше использовать одномернный массив, а не двумерный. Всегда принимал это на правду, но сейчас задумался. Нужели умножение...

посоветуйте какую-то книгу или даже видео курс,ну или еще что-то, ну чтобы с самого начала ,с нуля объяснялось. - C++
ВСЕМ привет. В общем дело вот в чем: Серьёзно решил заняться изучением C++ ,до этого ничем подобным не занимался ,ну разве что HTML...

If vs. If else - миф или что-то еще? - C++
Кто - нибудь проверял утверждение что if ... else занимает меньше времени чем if... if... if ? Я сравнила два варианта одной и той же...

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

Как в выделенную память записать поочередно число int, массив char[n], и еще число int - C++
Выделяю память void* Start=malloc(Size); Как туда записать поочередно число int, массив char, и еще число int?

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
16.10.2012, 15:47 #2
Alejo, сохраняйте число А в виде строки
Alejo
0 / 0 / 0
Регистрация: 26.09.2012
Сообщений: 38
16.10.2012, 15:52  [ТС] #3
I.M., Проблема в том, что нужно использовать простейшие средства для выполнения задачи (строки использовать нельзя).
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
16.10.2012, 15:56 #4
http://ru.wikipedia.org/wiki/Limits.h
Это описание значений, которые могут содержать типы данных.
берите unsigned long long
но и он имеет предел
Alejo
0 / 0 / 0
Регистрация: 26.09.2012
Сообщений: 38
16.10.2012, 16:06  [ТС] #5
I.M., Действительно, 10 знаков это превышение предела int. Попробовал изменить int q на long int q - программа считает и закрывается из за ошибки.
Придется искать другой способ разбиения числа на цифры.
Nameless One
Эксперт С++
5771 / 3420 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
16.10.2012, 16:13 #6
Цитата Сообщение от I.M. Посмотреть сообщение
http://ru.wikipedia.org/wiki/Limits.h
Это описание значений, которые могут содержать типы данных.
Это сишный хедер. Для C++ есть numeric_limits. Хотя, пределы целочисленных типов можно элементарно вычислить самому.
Кот Ангенс
317 / 267 / 38
Регистрация: 24.05.2012
Сообщений: 629
16.10.2012, 16:26 #7
Цитата Сообщение от Alejo Посмотреть сообщение
Попробовал изменить int q на long int q
Не long, а long long.
Nameless One
Эксперт С++
5771 / 3420 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
16.10.2012, 16:34 #8
Цитата Сообщение от Alejo Посмотреть сообщение
I.M., Проблема в том, что нужно использовать простейшие средства для выполнения задачи (строки использовать нельзя).
Можно организовать через посимвольный ввод, т.е. без использования строк. При этом пропадает необходимость хранить введенное значение в числовой переменной и заморачиваться вопросами переполнения.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <iostream>
#include <limits>
    
int main()
{
    char c;
    int i;
    std::cout << "Enter a digit: " << std::flush;
    std::cin >> i;
 
    if(!std::cin || i < 0 || i > 9)
    {
        std::cerr << "Not a digit: " << i << std::endl;
        return 1;
    }
    
    std::cout << "Enter a number: " << std::flush;
 
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
        
    bool found = false;
    while(true)
    {
        std::cin.get(c);
        if(c == '\n')
            break;
        if(!std::cin || c < '0' || c > '9')
        {
            std::cerr << "Not a digit: " << c << std::endl;
            return 1;
        }
        
        if(c == i + '0')
        {
            found = true;
            break;
        }
    }
 
    std::cout << (found ? "Found" : "Not found") << std::endl;
}
Пример использования:
Bash
1
2
3
4
5
6
7
8
9
10
11
~/samples/cpp $ ./sample 
Enter a digit: 0
Enter a number: 12342341234123412341234123794712349172349712349172349172349172349172349172349823749237492137419237419234712937491237419237402412341234123412341234
Found
~/samples/cpp $ ./sample 
Enter a digit: 3
Enter a number: 199991919829199191980
Not found
~/samples/cpp $ ./sample 
Enter a digit: 15
Not a digit: 15
Alejo
0 / 0 / 0
Регистрация: 26.09.2012
Сообщений: 38
16.10.2012, 17:27  [ТС] #9
Nameless One,
Цитата Сообщение от Alejo Посмотреть сообщение
I.M., Проблема в том, что нужно использовать простейшие средства для выполнения задачи (строки использовать нельзя).
Nameless One
Эксперт С++
5771 / 3420 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
17.10.2012, 02:00 #10
Где ты там строки увидел? char - такой же целочисленный тип, как и int
ZaMaZaN4iK
Мой лучший друг-отладчик!
163 / 163 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
17.10.2012, 02:28 #11
Ну незнаю, но я всегда всегда такие задачи решал используя vector, и проблем таких не возникало вообще.
Alejo
0 / 0 / 0
Регистрация: 26.09.2012
Сообщений: 38
17.10.2012, 21:17  [ТС] #12
Цитата Сообщение от Nameless One Посмотреть сообщение
Где ты там строки увидел? char - такой же целочисленный тип, как и int
Ты предлагаешь вводить каждую цифру числа через пробел или через enter ? Если бы это было разрешено, я бы не создавал этой темы. Если бы можно было бы использовать строки в программе я бы тоже не создавал бы темы. Мне нужно что бы преподаватель ввел число, например "123456789987654321" и затем какую нибудь цифру, например "5" или "0" и программа выдала бы что эта цифра входит в число, либо наоборот - не входит. Программа должна состоять их простейших циклов и операторов, как если бы ее делал человек, который только начал изучать язык (как я к примеру).
Somebody
2788 / 1602 / 145
Регистрация: 03.12.2007
Сообщений: 4,193
Завершенные тесты: 1
17.10.2012, 21:40 #13
Почему же через пробел и enter? Ввести строку можно сразу, это читаться она будет по одному символу.
Nameless One
Эксперт С++
5771 / 3420 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
18.10.2012, 02:24 #14
Цитата Сообщение от Alejo Посмотреть сообщение
Ты предлагаешь вводить каждую цифру числа через пробел или через enter ? Если бы это было разрешено, я бы не создавал этой темы.
А самому программу запустить и посмотреть, как она работает, не судьба? Или даже не так, просмотреть внимательно пример в сообщении #8? Ты там где-нибудь видишь пробелы или Enter при вводе числа?

Цитата Сообщение от Alejo Посмотреть сообщение
Если бы можно было бы использовать строки в программе я бы тоже не создавал бы темы.
Еще раз повторю, нигде там строки не используются.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.10.2012, 02:24
Привет! Вот еще темы с ответами:

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

GetRandomInt( int min, int max ) или Генерация случайных чисел - C++
Это программа, генерирующая случайное имя и приветствие. Но вот почему-то, случайность выпадения чисел одинаковая при каждом включении...

Что означает эта строка? int _tmain(int argc, _TCHAR* argv[]) - C++
Всем привет, до этого пользовался DEV, решил пересесть на Visual Studio 2010 Express C++. С++ еще не изучал, хочу сначала добить &quot;С&quot;. ...

Что это такое int (*func4 (void)(int) - C++
Это примеры указателей на функцию. Понятно.void (*func1) (void *, int *); void (*func2) (int, int *); void (*func3) (void); А это что...


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

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

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