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

Целое четырехзначное число заменить числом, получающимся при записи его цифр в обратном порядке - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.69
Licwin
2 / 3 / 0
Регистрация: 18.11.2010
Сообщений: 126
10.02.2012, 01:15     Целое четырехзначное число заменить числом, получающимся при записи его цифр в обратном порядке #1
подскажите как заменить число в обратном порядке в С?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.02.2012, 01:15     Целое четырехзначное число заменить числом, получающимся при записи его цифр в обратном порядке
Посмотрите здесь:

Заменить данное натуральное число на число, которое получается из исходного записью его цифр в обратном порядке C++
C++ найти число, которое получено из N перестановкой его цифр в обратном порядке
Составить программу для нахождения числа, которое образуется из данного натурального числа при записи его цифр в обратном порядке C++
Целое положительное число m записывается в 16-ой системе счисления и разряды в этой записи переставляются в обратном порядке. Получившиеся число прини C++
Дано четырехзначное натуральное число А. Требуется определить что больше: число А или произведение его цифр? C++
Ввывести новое число, которое получится после записи цифр числа в обратном порядке C++
C++ В заданном массиве натуральных чисел заменить все числа на такие числа, которые получаться из исходного записью его цифр в обратном порядке
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9382 / 5432 / 916
Регистрация: 25.07.2009
Сообщений: 10,428
10.02.2012, 02:15     Целое четырехзначное число заменить числом, получающимся при записи его цифр в обратном порядке #2
Было уже 100500 раз, но искать тоже лень
C
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
 
int main(void){
    int n;
    
    while ( printf("Number: ") && scanf("%d", &n) == 1 && n > 999 && n < 10000 )
        printf("Result: %04d\n", n % 10 * 1000 + n / 10 % 10 * 100 + n / 100 % 10 * 10 + n / 1000);
    
    return 0;
}
Сtrl
 Аватар для Сtrl
139 / 129 / 3
Регистрация: 19.07.2011
Сообщений: 184
10.02.2012, 02:18     Целое четырехзначное число заменить числом, получающимся при записи его цифр в обратном порядке #3
Ха-ха, easybudda, а если там будет не 4, а 100 цифр?
На C++ я сделал так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
 
template <class T>
T numeric_reverse(T number, const T base = 10)
{
    if (number < base && number >= 0)
        return number;
    T rnumber = number;
    T mbase = 1;
    do {
        mbase *= base;
    } while (rnumber /= base);
    do {
        rnumber += (number % base) * (mbase /= base);
    } while (number /= base);
    return rnumber;
}
 
int main() 
{ 
    std::cout << numeric_reverse(1234);
    std::cin.get();
}
В обычном Си я не силен, но после адаптации получилось вот так:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
 
int numeric_reverse(int number, const int base)
{
    int rnumber = number;
    int mbase = 1;
    if (number < base && number >= 0)
        return number;
    do {
        mbase *= base;
    } while (rnumber /= base);
    do {
        rnumber += (number % base) * (mbase /= base);
    } while (number /= base);
    return rnumber;
}
 
int main() 
{ 
    printf("%d", numeric_reverse(1234, 10));
    getchar();
}
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9382 / 5432 / 916
Регистрация: 25.07.2009
Сообщений: 10,428
10.02.2012, 02:25     Целое четырехзначное число заменить числом, получающимся при записи его цифр в обратном порядке #4
Цитата Сообщение от Сtrl Посмотреть сообщение
Ха-ха, easybudda, а если там будет не 4, а 100 цифр?
А если цифры будут не только арабские, но так же римские, племени майа и марсианские? Читаем задание и голову себе не забиваем. Было бы неопределённое количество цифр - было бы другое решение.
И кстати... А какой стандартный тип данных способен хранить число с точностью в 100 цифр? При таком подходе это уже реверс строки будет...
Сtrl
 Аватар для Сtrl
139 / 129 / 3
Регистрация: 19.07.2011
Сообщений: 184
10.02.2012, 02:29     Целое четырехзначное число заменить числом, получающимся при записи его цифр в обратном порядке #5
Цитата Сообщение от easybudda Посмотреть сообщение
А если цифры будут не только арабские, но так же римские, племени майа и марсианские?
В идеале неплохо бы и эти случаи рассмотреть.
Цитата Сообщение от easybudda Посмотреть сообщение
И кстати... А какой стандартный тип данных способен хранить число с точностью в 100 цифр? При таком подходе это уже реверс строки будет...
Нет такого типа, но задача не сводится к обращению строки. Надеюсь, мне не придется рассказывать про длинную арифметику, чтобы это доказать.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9382 / 5432 / 916
Регистрация: 25.07.2009
Сообщений: 10,428
10.02.2012, 03:31     Целое четырехзначное число заменить числом, получающимся при записи его цифр в обратном порядке #6
Цитата Сообщение от Сtrl Посмотреть сообщение
Нет такого типа, но задача не сводится к обращению строки.
Не сводится, но так проще.
Цитата Сообщение от Сtrl Посмотреть сообщение
Надеюсь, мне не придется рассказывать про длинную арифметику, чтобы это доказать.
Ну я когда-то краем уха слышал, а вот топикстартеру, думаю, интересно будет узнать. Так, что, если не затруднит...

Варварский способ перевернуть от 1 до 9 цифр, ТС, никогда так не делайте! Ну раз уж решили повыпендриваться...
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <math.h>
#include <limits.h>
 
#define digitscount(num) ((int)log10(num) + 1)
#define MAX_DIGITS digitscount(UINT_MAX)
 
unsigned swap_digits(unsigned num, int left, int right){
    return ( left < right ) ? 0 : ( left == right ) ? num / (int)pow(10.0, right - 1) % 10 * (int)pow(10.0, right - 1) :
        num / (int)pow(10.0, left - 1) % 10 * (int)pow(10.0, right - 1) + num / (int)pow(10.0, right - 1) % 10 * (int)pow(10.0, left - 1) + swap_digits(num, left - 1, right + 1);
}
 
int main(void){
    unsigned n;
    int digits;
    
    while ( printf("Number: ") && scanf("%u", &n) == 1 && n > 0 && ( digits = digitscount(n) ) < MAX_DIGITS )
        printf("Result: %0*u\n", digits, swap_digits(n, digits, 1));
    
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.02.2012, 03:50     Целое четырехзначное число заменить числом, получающимся при записи его цифр в обратном порядке
Еще ссылки по теме:

C++ Для каждого числа последовательности вывести новое число, которое получится после записи цифр числа в обратном порядке
Дано четырехзначное число. Найти сумму его цифр C++
Заменить данное число на число, которое получается из исходного записью цифр в обратном порядке C++
Найти число, которое образуется из данного натурального числа при записи его цифр в обратном порядке C++

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

Или воспользуйтесь поиском по форуму:
Roof
 Аватар для Roof
154 / 154 / 10
Регистрация: 03.11.2010
Сообщений: 393
10.02.2012, 03:50     Целое четырехзначное число заменить числом, получающимся при записи его цифр в обратном порядке #7
Вот мой простой вариант:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <stdlib.h>
 
#define base 10
 
unsigned revers_value( unsigned );
 
int main( void ) {
 
    unsigned res = revers_value( 8476 );
    printf( "%u", res );
    return EXIT_SUCCESS;
}
 
unsigned revers_value( unsigned val ) {
    unsigned res = 0;
    while ( val ) {
        res = res * base + val % base;
        val /= base;
    }
    return res;
}

Не по теме:

Цитата Сообщение от Сtrl Посмотреть сообщение
В идеале неплохо бы и эти случаи рассмотреть.
Представляю себе преподавателя , которому студент, не разбирающийся в программировании принесет решение :-)

Yandex
Объявления
10.02.2012, 03:50     Целое четырехзначное число заменить числом, получающимся при записи его цифр в обратном порядке
Ответ Создать тему
Опции темы

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