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

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

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

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

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

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

Задача
Реверсировать число и увеличить его в 2 раза.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
22.01.2011, 21:28     Реверсирование #2
Наська_91, в чём проблема? В алгоритме?
Наська_91
0 / 0 / 0
Регистрация: 15.01.2011
Сообщений: 12
22.01.2011, 21:30  [ТС]     Реверсирование #3
volovzi, скорее всего в самом описании... Я знаю что нужно использовать "%"... но как???
Мигрень
20 / 20 / 2
Регистрация: 09.11.2010
Сообщений: 102
22.01.2011, 21:34     Реверсирование #4
Реверсировать число
C++
1
2
3
4
5
    while(chislo)
    {
        std::cout<<chislo % 10;
        chislo /= 10;
    }

а как увеличить на 2 - уже сами
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
22.01.2011, 21:35     Реверсирование #5
Наська_91, ну тогда сформулируй алгоритм, а мы тебе подскажем, как написать программу.
Наська_91
0 / 0 / 0
Регистрация: 15.01.2011
Сообщений: 12
22.01.2011, 21:36  [ТС]     Реверсирование #6
Мигрень, я так уже пробовала, но она не выполняется... Не знаю почему... Может проблела в Microsoft Visual Studio 2005???
Мигрень
20 / 20 / 2
Регистрация: 09.11.2010
Сообщений: 102
22.01.2011, 21:38     Реверсирование #7
Копируйте сюда ваш код... телепатически не определить что вы там "пробовали"
Наська_91
0 / 0 / 0
Регистрация: 15.01.2011
Сообщений: 12
22.01.2011, 21:40  [ТС]     Реверсирование #8
Мигрень, Вот...
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
# include <iostream> 
using namespace std;
int main()
{
    /*Дано довільне ціле число n. Написати програму, яка розбиває число n на цифри і виводить 
    їх на екран; підраховує скільки цифр в числі n; знаходить суму цифр числа n; змінює 
    порядок цифр числа n на зворотній. Збільшити отримане реверсне число у 2 рази.*/
    int n=0, a=0, b=0, kilkist=0, summ=0, reversne=0;
    cout<<"Enter int n="; 
    cin>>n;
    for (int i=0; n!=0; i++)
    {
        a=n%10; //визначає останню цифру числа n
        b=n/10; //відкидає останню цифру числа n
        n=b;
        summ+=a; //підраховує сумму цифр в числі n
        kilkist+=1; //підраховує к-ть цифр в числі n
        cout<<a<<"; ";//виводить цифри з яких складається число n
    }
    cout<<"\n";
    cout<<"kilkist="<<kilkist<<endl;
    cout<<"summ="<<summ<<endl;
    cout<<"Reversne=";
    while(n)
    {
        cout<<n % 10;
        n =/ 10;
    }
    cout<<endl;
    return 0;
}
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
22.01.2011, 21:45     Реверсирование #9
Наська_91, для этой задачи нужно всего две переменных: из одной последовательно удаляются с конца разряды и добавляются во вторую.
Чтобы взять последний разряд числа, нужно поделить его по модулю 10, в C++ это выглядит так: number % 10. Затем это число нужно поделить на десять.
Со второй переменной поступать надо в обратном подярке: сначала умножить на десять, а потом добавить тот самый выделенный разряд.
panicwassano
591 / 559 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
22.01.2011, 21:45     Реверсирование #10
реверс
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
#include "stdafx.h"
 
void reversNumber(int Number);
 
int _tmain(int argc, _TCHAR* argv[])
{
    reversNumber(24);
    _getch();
    return 0;
}
 
void reversNumber(int Number)
{
    if (!(Number / 10))
    {
        std::cout << Number;
    }
 
    else    
    {
        std::cout << Number % 10;
        reversNumber(Number/10);
    }
}
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
22.01.2011, 21:47     Реверсирование #11
panicwassano, это неверный подход.
panicwassano
591 / 559 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
22.01.2011, 21:48     Реверсирование #12
Цитата Сообщение от volovzi Посмотреть сообщение
panicwassano, это неверный подход.
чем? первое что на ум пришло просто
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
22.01.2011, 21:49     Реверсирование #13
panicwassano, твоя программа просто печатает цифры, а задача подразумевает получение некоторого числа, с которым можно произвести арифметическую операцию (в данном случае это умножение на два).
panicwassano
591 / 559 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
22.01.2011, 21:51     Реверсирование #14
Цитата Сообщение от volovzi Посмотреть сообщение
panicwassano, твоя программа просто печатает цифры, а задача подразумевает получение некоторого числа, с которым можно произвести арифметическую операцию (в данном случае это умножение на два).
я написал не решение задачи, а как можно реверсировать, если вы знаете почему бы вам самим полностью не написать ???
Мигрень
20 / 20 / 2
Регистрация: 09.11.2010
Сообщений: 102
22.01.2011, 21:51     Реверсирование #15
Если не брать во внимание пару синтаксических ошибок, то в этой части кода
C++
1
2
3
4
5
 while(n)
    {
        cout<<n % 10;
        n =/ 10;
    }
вы используете n которое выше уже подвергалось обработке и изменило свое начальное значение
asics
Freelance
Эксперт C++
2842 / 1779 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
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;
Ну ищю легких путей
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
22.01.2011, 21:56     Реверсирование #17
Цитата Сообщение от panicwassano Посмотреть сообщение
я написал не решение задачи, а как можно реверсировать, если вы знаете почему бы вам самим полностью не написать ???
Потому что если я напишу решение, то я не помогу автору темы. Лучшая помощь — указание примерного направления.

Добавлено через 43 секунды
asics, как шутка покатит .
panicwassano
591 / 559 / 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;
}
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
22.01.2011, 22:04     Реверсирование #19
panicwassano, слишком сложно . В функции достаточно одной локальной переменной.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.01.2011, 22:08     Реверсирование
Еще ссылки по теме:

Lisp Реверсирование части подсписков
Lisp Проверка и реверсирование списка
Частичное реверсирование с помощью стека Lisp
C# Реверсирование самих строк в очереди

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

Или воспользуйтесь поиском по форуму:
panicwassano
591 / 559 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
22.01.2011, 22:08     Реверсирование #20
напишите, я никак не додумаюсь
Yandex
Объявления
22.01.2011, 22:08     Реверсирование
Ответ Создать тему
Опции темы

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