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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.88
Наська_91
0 / 0 / 0
Регистрация: 15.01.2011
Сообщений: 12
#1

Реверсирование - C++

22.01.2011, 21:24. Просмотров 2137. Ответов 32
Метки нет (Все метки)

Помогите пожалуйста!

Задача
Реверсировать число и увеличить его в 2 раза.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.01.2011, 21:24
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Реверсирование (C++):

Реверсирование строк - C++
Всем добрый вечер! Как всегда, практикуюсь по книжным примерам. Вот дошёл до темы реверсирования строк, то есть расположения букв в...

Реверсирование строк - C++
Нужно отсортировать строки по алфавиту и вывести в файл реверсированные строки. #include "stdafx.h" #include <fstream> #include...

реверсирование строки - Assembler
Помогите написать программу реверсирования строки, т.е. замены прядка следования символов в строке на обратный.

Реверсирование строки - Assembler
может ошибки где есть? .data stroka db 'stroka',0 len equ $-stroka stdout DWORD ? cWritten DWORD ? .code proga: ...

Объединение и реверсирование - Assembler
Всем привет! Помогите пожалуйста с программой. Необходимо написать реверсирование строки, используя при этом объединение(сложная структура,...

Проверка и реверсирование списка - Lisp
Проверяем подсписок на элементы с d по k, если таковые имеются, то выводим реверсированный список, если нет, то исходный.

32
asics
Freelance
Эксперт С++
2847 / 1782 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
22.01.2011, 21:54 #16
Вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
std::ostringstream ost;
ost << n;
std::string n_ = ost.str();
std::reverse(n_.begin(), n_.end());
n = 0;
std::for_each(n_.begin(), n_.end(), [&n](char a_)
{
   n += a_ - '0';
   n *= 10;
});
n /= 10;
Ну ищю легких путей
0
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
22.01.2011, 21:56 #17
Цитата Сообщение от panicwassano Посмотреть сообщение
я написал не решение задачи, а как можно реверсировать, если вы знаете почему бы вам самим полностью не написать ???
Потому что если я напишу решение, то я не помогу автору темы. Лучшая помощь — указание примерного направления.

Добавлено через 43 секунды
asics, как шутка покатит .
0
panicwassano
592 / 560 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
22.01.2011, 22:01 #18
Наська проверяйте
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
#include "stdafx.h"
 
int reversNumber(int Number);
 
int _tmain(int argc, _TCHAR* argv[])
{
    std::cout << reversNumber(25);
    _getch();
    return 0;
}
 
int reversNumber(int Number)
{
    int newNumber = Number;
    int count = 0;
    while (Number)
    {
        Number /= 10;
        count++;
    }
 
    int *arr = new int [count];
    for (int i = 0; i < count; ++i)
    {
        arr[i] = newNumber % 10;
        newNumber /= 10;
    }
 
    int sum = 0;
    int n = 1;
    for (int i = count - 1; i >= 0; --i)
    {
        sum += arr[i]*n;
        n *= 10;
    }
 
    delete [] arr;
    return 2*sum;
}
0
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
22.01.2011, 22:04 #19
panicwassano, слишком сложно . В функции достаточно одной локальной переменной.
0
panicwassano
592 / 560 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
22.01.2011, 22:08 #20
напишите, я никак не додумаюсь
0
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
22.01.2011, 22:09 #21
panicwassano, я на первой странице дал суперподробное описание.
0
CyBOSSeR
Эксперт С++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
22.01.2011, 22:15 #22
C++
1
2
3
4
5
6
7
8
9
10
11
#include <algorithm>
#include <string>
#include <boost/lexical_cast.hpp>
 
int ReverseAndDouble(int n) {
  std::string s = boost::lexical_cast<std::string>(n);
 
  std::reverse(s.begin(), s.end());
 
  return 2 * boost::lexical_cast<int>(s);
}
0
panicwassano
592 / 560 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
22.01.2011, 22:16 #23
там не особо понятно написано. я вижу это так берем число 543 и ищем остаток от деления на 10, будет 3 как это 3 нужно умножить на 100 не зная число разрядов???
0
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
22.01.2011, 22:19 #24
CyBOSSeR, та же фигня. Громоздко и неповоротливо, да ещё и с подключением сторонней библиотеки.

panicwassano, работа происходит по принципу стека. Из одного числа достаётся, в другое кладётся.
0
CyBOSSeR
Эксперт С++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
22.01.2011, 22:26 #25
Цитата Сообщение от volovzi Посмотреть сообщение
Громоздко и неповоротливо
Код чист, понятен, и не содержит велосипедов. В чем громоздкость и неповоротливость?
Цитата Сообщение от volovzi Посмотреть сообщение
да ещё и с подключением сторонней библиотеки
На код которой можно без проблем положиться.
0
panicwassano
592 / 560 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
22.01.2011, 22:27 #26
volovzi с 1ой переменной что-то совсем никак
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int reversNumber(int Number)
{
    int count = 0;
    int sum = Number;
    while (Number)
    {
        Number /= 10;
        count++;
    }
 
    while (sum)
    {
        Number += (sum % 10)*pow(static_cast<double>(10), --count);
        sum /= 10;
    }
 
    return 2*Number;
}
0
Наська_91
0 / 0 / 0
Регистрация: 15.01.2011
Сообщений: 12
22.01.2011, 22:29  [ТС] #27
ВСЕМ БОЛЬШОЕ СПАСИБО!!!
ТАМ ВСЕ ДЕЙСТВИТЕЛЬНО НАМНОГО ПРОЩЕ...
ВОТ:
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> 
using namespace std;
int main()
{
    /*Дано довільне ціле число n. Написати програму, яка розбиває число n на цифри і виводить 
    їх на екран; підраховує скільки цифр в числі n; знаходить суму цифр числа n; змінює 
    порядок цифр числа n на зворотній. Збільшити отримане реверсне число у 2 рази.*/
    int n=0, n1=0, n2=0, a=0, b=0, kilkist=0, summ=0, reversne=0;
    cout<<"Enter int n="; 
    cin>>n; 
    n1=n;
    for (int i=0; n!=0; i++)
    {
        a=n%10; //визначає останню цифру числа n
        b=n/10; //відкидає останню цифру числа n
        n=b;
        reversne=reversne*10+a;
        summ+=a; //підраховує сумму цифр в числі n
        kilkist+=1; //підраховує к-ть цифр в числі n
        cout<<a<<"; ";//виводить цифри з яких складається число n
    }
    cout<<"\n";
    cout<<"kilkist="<<kilkist<<endl;
    cout<<"summ="<<summ<<endl;
    cout<<"Reversne="<<reversne<<endl;
    cout<<"Reversne*2="<<reversne*2<<endl;
    cout<<endl;
    return 0;
}
0
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
22.01.2011, 22:33 #28
CyBOSSeR, перевод числа в строку и наоборот, а так же std::reverse — довольно затратные операции. Можно сделать не менее чисто и понятно, но без лишних операций.

Добавлено через 1 минуту
Наська_91, молодец .

panicwassano, если почистить Наськин код, то как раз можно обойтись одной переменной.
1
Наська_91
0 / 0 / 0
Регистрация: 15.01.2011
Сообщений: 12
22.01.2011, 22:33  [ТС] #29
volovzi, спасибо
0
panicwassano
592 / 560 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
22.01.2011, 22:38 #30

C++
1
2
3
4
5
6
7
8
9
10
11
int reversNumber(int Number)
{
    int newNumber = 0;
    while (Number)
    {
        newNumber = newNumber*10 + (Number % 10);
        Number /= 10;
    }
 
    return 2*newNumber;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.01.2011, 22:38
Привет! Вот еще темы с ответами:

Реверсирование части подсписков - Lisp
Здравствуйте! Поставлена следующая задача: реверсировать только подсписки, четных степеней вложения. Как это можно реализовать ? Спасибо)

Задача на реверсирование чисел - C (СИ)
В общем задача на реверсирование чисел у меня получилось только с положительными числами вот пример: #include &quot;stdafx.h&quot; int...

Реверсирование самих строк в очереди - C#
Здравствуйте, нужно создать очередь из произволных числа строк и реверсировать их,то есть изменить порядок следования СТРОК(самих строк) на...

Частичное реверсирование с помощью стека - Lisp
У кого-нибудь есть идеи насчет этой задачи? :) Реализовать стек в виде списка. Дана величина a строкового типа из четного количества...


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

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

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