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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 47, средняя оценка - 4.85
smisha
Сообщений: n/a
20.08.2011, 23:12     Перевернуть число #1
Задача:
Перевернуть введенное пользователем число и вывести на екран.
Сначала я подсчитал количество цифр в числе:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <math.h>
using namespace std;
void main()
{
        int number, i;
        float ostatok;
        cout<<"Vvedite chyslo\n";
        cin>>number;
        ostatok=number;
        for (i=0;ostatok>=1;i++)
        {
        ostatok/=10;
        }
        // i - содержит количество цифр в числе
Здесь все правильно.
Алгоритм следующего блока такой:
- в цикле поделить число на 10 в степени от 0 до i (до количества цифр), округлить результат до меньшего целого (функция floor) - так мы должны получить переменную chast;
- в цикле переменную chast целочисельно (%) делим на 10, і остаток от этого деления умножаем на 10 в степене от і-1 до 1 .

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int perevernut=0;
int chast;
float n=0;
 
 for (;i==1;--i)
        {
         chast=floor(number/pow((float)10,n));
        perevernut+=(chast%10)*pow((float)10,(float)i-1);
        n++;
        }
        
        cout<<perevernut;
        cout<<"\n";
        system("pause");
}
Я вижу, что результат функции pow((float)10,n)) - полная белиберда. Но не могу понять почему? Может быть проблема в самрм алгоритме?

Помогите разобраться с этим.
Спасибо.
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Olga_
 Аватар для Olga_
840 / 182 / 16
Регистрация: 01.08.2011
Сообщений: 502
20.08.2011, 23:21     Перевернуть число #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Можно проще. Функция возвращает перевернутое число:
C++
1
2
3
4
5
6
7
8
9
10
long Perevert(long x)
{
   long y = 0;
   while(x)
   {
       y = y*10 + x%10;
       x /= 10;
   }
   return y;
}
nameless
Эксперт C++
 Аватар для nameless
289 / 288 / 14
Регистрация: 16.06.2009
Сообщений: 486
20.08.2011, 23:37     Перевернуть число #3
Цитата Сообщение от Olga_ Посмотреть сообщение
Можно проще. Функция возвращает перевернутое число:
Или совсем проще:

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
#include <iostream>
#include <algorithm>
#include <string>
#include <sstream>
 
int RotateNumber(int number) {
   std::ostringstream output_stream;
   int result;
   
   output_stream << number;
   std::string str_number = output_stream.str();
   
   std::reverse(str_number.begin(),str_number.end());
   
   std::istringstream input_stream(str_number, std::istringstream::in);
   input_stream >> result;
   
   return result;
}
 
int main() {
   int number = 99019023;
   
   std::cout << RotateNumber(number) << std::endl;
 
   return 0;
}
germeticus
27 / 27 / 1
Регистрация: 21.06.2011
Сообщений: 82
20.08.2011, 23:42     Перевернуть число #4
Ну и наверное один из возможных коротких кодов:

C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <string>
int main()
{
       std::string cBuf;
       std::cin >> cBuf;
       int k = cBuf.length();
       while(k-- > 0)  std::cout << cBuf[k];
       std::cout << std :: endl;
       system("pause");
}
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
20.08.2011, 23:45     Перевернуть число #5
germeticus, Ну в таком случае проще так.

C++
1
2
3
std::string str;
std::cin >> str;
std::cout << std::string(str.rbegin(), str.rend()) << '\n';
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
21.08.2011, 09:01     Перевернуть число #6
Или так
C
1
2
3
4
5
6
#include <stdio.h>
int reverse_print(int x){ return x ? printf("%d ", x % 10), reverse_print(x / 10) + 1 : 0; }
int main(){
    int n;
    while ( scanf("%d", &n) && printf("\ndigits - %d\n", reverse_print(n) ) );
}
Правда если вбить нуль, то будет считать, что введено 0 цифр...
smisha
Сообщений: n/a
21.08.2011, 13:28     Перевернуть число #7
Спасибо всем за советы!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.08.2011, 17:31     Перевернуть число
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Olga_
 Аватар для Olga_
840 / 182 / 16
Регистрация: 01.08.2011
Сообщений: 502
21.08.2011, 17:31     Перевернуть число #8
А если требуется перевернуть число и результат записать в дробную часть, например из 12345 получить 0,54321, то можно так:
C++
1
2
3
4
double Inverse(long x)
{
   return x ? Inverse((double)x/10)/10 + (double)(x%10)/10 : 0;
}
Yandex
Объявления
21.08.2011, 17:31     Перевернуть число
Ответ Создать тему
Опции темы

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