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

Перевернуть число - C++

Восстановить пароль Регистрация
 
Outmee
 Аватар для Outmee
2 / 2 / 0
Регистрация: 26.01.2014
Сообщений: 56
27.01.2014, 13:51     Перевернуть число #1
Здравствуйте, Ув. Форумчане

Очень интересен алгоритм построения этой программы

Буду особо благодарен

Смею заметить что в запас знаний ожидает желать лучшего.
Длинна кода особого значения не имеет
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
27.01.2014, 13:55     Перевернуть число #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Как они только не иозворачиваются в формулировках...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
 
int main()
{
    int n = 123456;
 
    int rev_n = 0;
 
    while (n)
    {
        rev_n = rev_n * 10 + (n % 10);
        n /= 10;
    }
 
    std::cout << rev_n << std::endl;
}
Outmee
 Аватар для Outmee
2 / 2 / 0
Регистрация: 26.01.2014
Сообщений: 56
27.01.2014, 14:07  [ТС]     Перевернуть число #3
C++ (Qt)
1
2
3
4
5
while (n)
    {
        rev_n = rev_n * 10 + (n % 10);
        n /= 10;
    }
Что тут происходит?

Добавлено через 1 минуту
Фирштейн, спасибо
lukalexrus
7 / 6 / 1
Регистрация: 12.01.2014
Сообщений: 32
27.01.2014, 14:08     Перевернуть число #4
Outmee, результат умножается на 10 после чего к нему же прибавляется остаток от деления исходного числа на 10( ну или последняя цифра), после чего исходное чисо делится на 10, для того чтобы из исходного же числа выкинуть последнюю цифру
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
27.01.2014, 14:14     Перевернуть число #5
Мне иногда становится интересно: а если на каждый чих написать отдельную функцию, такой код будет ясен или вызовет еще больше вопросов?
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
#include <iostream>
 
void remove_last_digit(int& n) {
    n /= 10;
}
 
int get_last_digit(int& n) {
    return n % 10;
}
 
void add_last_digit(int& n, int digit) {
    n = n * 10 + digit;
}
 
int main()
{
    int n = 1023456;
 
    int rev_n = 0;
 
    while (n)
    {
        int last = get_last_digit(n);
        add_last_digit(rev_n, last);
        remove_last_digit(n);
    }
 
    std::cout << rev_n << std::endl;
}
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
27.01.2014, 14:36     Перевернуть число #6

Не по теме:

Цитата Сообщение от 0x10 Посмотреть сообщение
вызовет еще больше вопросов
т.к. прокомментируйте, пожалуйста, на русском



Добавлено через 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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <iostream>
 
class reverser
{
public:
    reverser(int orig) : orig(orig), done(false) {}
    int result() const { return done ? res : reverse(); }
private:
    int reverse() const
    {
        res = 0;
        int n = orig;
        while (n)
        {
            int last = get_last_digit(n);
            add_last_digit(res, last);
            remove_last_digit(n);
        }
        done = true;
        return res;
    }
 
    static void remove_last_digit(int& n) {
        n /= 10;
    }
     
    static int get_last_digit(int& n) {
        return n % 10;
    }
     
    static void add_last_digit(int& n, int digit) {
        n = n * 10 + digit;
    }
 
    mutable int res;
    const int orig;
    mutable bool done;
};
 
int main()
{
    int n = 1023456;
    reverser* rev = new reverser( n );
    std::cout << rev->result() << std::endl;
    delete rev;
}
http://ideone.com/JMJ6Vk
0x10
27.01.2014, 14:42
  #7

Не по теме:

Цитата Сообщение от Tulosba Посмотреть сообщение
Более "лучший" оопешный вариант:
Да давай уже сразу итератор, который поразрядно обходит целое число) И std::reverse какой-нибудь на него.

lukalexrus
7 / 6 / 1
Регистрация: 12.01.2014
Сообщений: 32
27.01.2014, 14:44     Перевернуть число #8
Tulosba, а разрешите вопрос не совсем по теме, что такое mutable? наподобии убирание константности? или как выразится?
Tulosba
27.01.2014, 14:44
  #9

Не по теме:

Цитата Сообщение от 0x10 Посмотреть сообщение
поразрядно обходит целое число
и ни один бит не останется безнаказанным

anmartex
...
 Аватар для anmartex
1699 / 1192 / 494
Регистрация: 12.02.2013
Сообщений: 1,978
27.01.2014, 14:46     Перевернуть число #10
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Можно и так :
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <cmath>
 
unsigned Func(unsigned value) {
   return value ? pow(10, static_cast<unsigned>(log10(value))) * (value % 10) + Func(value / 10) : 0;
}
 
int main() {
   std::cout << Func(123456) << std::endl;
 
   return 0;
}
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
27.01.2014, 14:51     Перевернуть число #11
Цитата Сообщение от lukalexrus Посмотреть сообщение
что такое mutable?
mutable позволяет менять поле из константной функции (ну или для константного объекта).
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;
 
struct C
{
    C(): a(0) {}
    mutable int a;  
};
 
int main() {
    
    C c;
    
    c.a = 10;
    
    const C cc;
    
    cc.a = 42; // без mutable эта строчка не компилируется
    
    return 0;
}
http://ideone.com/HipARx

Добавлено через 2 минуты
anmartex, на отрицательных числах ж*па
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.01.2014, 14:54     Перевернуть число
Еще ссылки по теме:

Пользователь вводит с клавиатуры число, необходимо перевернуть его (число) и вывести на экран C++
C++ Перевернуть число (перевернутое число выводится на экран)
Перевернуть число C++

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

Или воспользуйтесь поиском по форуму:
lukalexrus
7 / 6 / 1
Регистрация: 12.01.2014
Сообщений: 32
27.01.2014, 14:54     Перевернуть число #12
Tulosba, спасибо, буду знать
Yandex
Объявления
27.01.2014, 14:54     Перевернуть число
Ответ Создать тему
Опции темы

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