Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.12.2012, 14:01   #1
zorg-kirill
Пользователь
 
Регистрация: 11.11.2012
Сообщений: 32
По умолчанию Рекурсивный алгоритм вывода десятичного числа в прямом/обратном порядке

Подскажите алгоритм вывода десятичного числа в прямом и в обратном (задом наперед) порядке.
zorg-kirill вне форума Ответить с цитированием
Старый 13.12.2012, 14:46   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

В обратном порядке: вывести последнюю цифру, вывести число делённое нацело на 10.
В прямом порядке: вывести число делённое нацело на 10, вывести последнюю цифру.
В обоих случаях база - число от 0 до 9, в этом случае выводится соответствующая цифра.

P.S. Ах, да: если число отрицательное - вывести минус, вывести (минус число).

P.P.S. Не работает, если число минимальное отрицательное. Как быть в этом случае - подумайте сами.

Последний раз редактировалось Abstraction; 13.12.2012 в 14:49.
Abstraction вне форума Ответить с цитированием
Старый 13.12.2012, 20:54   #3
Murashov
Форумчанин
 
Аватар для Murashov
 
Регистрация: 30.10.2012
Сообщений: 121
По умолчанию

сейчас попробую написать.. задачка интересная)
Murashov вне форума Ответить с цитированием
Старый 13.12.2012, 21:13   #4
Dizelektwo
Пользователь
 
Регистрация: 05.04.2012
Сообщений: 56
По умолчанию

А можно поступить хитрее использовав ф-ию itoa, а потом вывести массив char с хвоста =D
Dizelektwo вне форума Ответить с цитированием
Старый 13.12.2012, 21:29   #5
Murashov
Форумчанин
 
Аватар для Murashov
 
Регистрация: 30.10.2012
Сообщений: 121
По умолчанию

фух) вроде решил
Код:
#include <stdio.h>
#include <stdlib.h>

int outputInversion(int number)
{
    if(number==NULL) return 0;
    printf("%d",number%10);
    outputInversion(number/=10);
}

int output(int number)
{
    if(number==NULL) return 0;
    int temp=number;
    int count=0;
    while(temp!=NULL)
    {
        temp/=10;
        count++;
    }
    temp=number;
    for(int i=1;i<count;i++)
        temp/=10;
    printf("%d", temp);
    for(int i=1;i<count;i++)
        temp*=10;

    output(number-temp);
}

int main()
{


    outputInversion(12345);
    printf("\n");
    output(12345);

    printf("\n");
    system("pause");
}

Последний раз редактировалось Murashov; 13.12.2012 в 21:35.
Murashov вне форума Ответить с цитированием
Старый 13.12.2012, 21:30   #6
Murashov
Форумчанин
 
Аватар для Murashov
 
Регистрация: 30.10.2012
Сообщений: 121
По умолчанию

Цитата:
Сообщение от Dizelektwo Посмотреть сообщение
А можно поступить хитрее использовав ф-ию itoa, а потом вывести массив char с хвоста =D
и как же собираетесь делать рекурсию из этого? обмануть функцию и отправить в неё вместо int char?)
Murashov вне форума Ответить с цитированием
Старый 13.12.2012, 21:33   #7
Murashov
Форумчанин
 
Аватар для Murashov
 
Регистрация: 30.10.2012
Сообщений: 121
По умолчанию

хотя можно перед отправкой аргумента инвертировать обратно.. чёрт, а я зад рвал над задачей) ну ок, так интереснее было
Murashov вне форума Ответить с цитированием
Старый 13.12.2012, 21:36   #8
Dizelektwo
Пользователь
 
Регистрация: 05.04.2012
Сообщений: 56
По умолчанию

Murashov

главное что недолго рвал))
Dizelektwo вне форума Ответить с цитированием
Старый 13.12.2012, 21:44   #9
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,429
По умолчанию

Чуть подредактировал код Murashovа:
Код:
#include <stdio.h>
#include <stdlib.h>

int outputInversion(int number)
{
    if(!number) return 0;
    printf("%d", number%10);
    outputInversion(number/10);
    return 0;
}

int output(int number)
{
    if(!number) return 0;
    output(number/10);
    printf("%d", number%10);
    return 0;
}

int main()
{
    outputInversion(12345);
    printf("\n");
    output(12345);
    printf("\n");
    return 0;
}
(Отрицательные не обрабатываются)
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 13.12.2012, 21:47   #10
Murashov
Форумчанин
 
Аватар для Murashov
 
Регистрация: 30.10.2012
Сообщений: 121
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Чуть подредактировал код Murashovа:
Код:
#include <stdio.h>
#include <stdlib.h>

int outputInversion(int number)
{
    if(!number) return 0;
    printf("%d", number%10);
    outputInversion(number/10);
    return 0;
}

int output(int number)
{
    if(!number) return 0;
    output(number/10);
    printf("%d", number%10);
    return 0;
}

int main()
{
    outputInversion(12345);
    printf("\n");
    output(12345);
    printf("\n");
    return 0;
}
(Отрицательные не обрабатываются)
точно :D
Murashov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Цифры заданного натурального числа запишите в обратном порядке Radius100 Помощь студентам 2 09.02.2012 11:39
Возврат числа в обратном порядке C tem_80 Общие вопросы C/C++ 5 25.01.2011 01:07
Вывод на экран записей в прямом и обратном порядке mileshin Помощь студентам 3 20.04.2010 09:19
Вывести числа в обратном порядке asmcc Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 14 20.02.2010 11:46