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

Рекурсия - C++

Восстановить пароль Регистрация
 
aleksand
21 / 9 / 2
Регистрация: 18.06.2011
Сообщений: 185
01.11.2012, 21:19     Рекурсия #1
Подскажите пожалуйста, почему когда я ввожу число состоящее из большого количества знаков(например 11111111111111111111), то программа выдаёт хз что, а когда из 123123, то нормально работает. Суть проги: мы ввели число (например 123), а она вывели 1,2,3
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
#include <stdio.h>
#include <iostream>
#include <Windows.h>
using namespace std;
 
void reverse(int x, int y)
{
    if(x>10) 
    {
        reverse(x/10, y);
    }
    else 
    {
        printf("%d,", x%10); //печатаем символ единицы, т.к. вернуться обратно не получится(это типа пик горы)
        return;
    }
 
    if(y==x) printf("%d\n", x%10);
    else printf("%d,", x%10); // печатаем все символы, когда возвращаемся обратно
}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int x, y;
    printf("Введите числа типа: 1234567890\n");
    scanf("%d", &x);
    y = x;
    reverse(x, y);
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
01.11.2012, 21:21     Рекурсия #2
Потому что есть предел на величину чисел, которые влазят в int. Даже для 64-битных машин это 9 223 372 036 854 775 807 (11 111 111 111 111 111 111 уже не влазит).
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
01.11.2012, 21:22     Рекурсия #3
ваше число не умещается в тип int
Хулиган
 Аватар для Хулиган
85 / 80 / 12
Регистрация: 08.08.2012
Сообщений: 737
02.11.2012, 02:05     Рекурсия #4
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <cmath>
using namespace std;
void rec(double, int);
int main() {
int ch;
cin>>ch;
double x=ceil(log10(ch));   // определяем поличество цифр в числе
rec(x, ch); //вызов рекурсивной функции
}
void rec(double x, int ch) {
     if(x>0) {
            int c=(ch%10); // определяем число стоящее в наименьшом разряде
            
             rec(x-1, (ch-(ch%10))/10); // полчаем число уменьшеное на 1 разряд.....наприм. (132-2)/10 = 13
             cout<<c<<"; "; //вывод чисел
}
}
ZaMaZaN4iK
Мой лучший друг-отладчик!
 Аватар для ZaMaZaN4iK
163 / 163 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
02.11.2012, 03:02     Рекурсия #5
потому что ваше число не влазят в тип данных.Если знаете, что будете работать с боьлшими целыми положительными числами, то юзайте unsigned long long(но даже он имеет предел)
Yandex
Объявления
02.11.2012, 03:02     Рекурсия
Ответ Создать тему
Опции темы

Текущее время: 09:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru