Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Инвертирование цифр (http://forum.oszone.net/showthread.php?t=278304)

alena_lep 24-02-2014 20:34 2314966

Инвертирование цифр
 
Здравствуйте. Помогите решить задачу. Не могу разобраться с тем, что конкретно нужно сделать. Дано трехзначное число. Вывести число, полученное в результате инвертирования цифр исходного числа (язык С). Помогите пожалуйста с алгоритмом.

torauma 25-02-2014 08:48 2315211

Цитата:

Цитата alena_lep
Вывести число, полученное в результате инвертирования цифр исходного числа »

Не понятно, что подразумевается под инвертированием. Возможно, нужно записать цифры в обратном порядке, тогда как то так:
Код:

#include <stdio.h>

int main()
{
        int num, result = 0;
        scanf("%d",&num);
        result = num / 100 + (num % 100 - num % 10) + (num % 10) * 100;
        printf("%d",result);
        return 0;
}


XPEHOMETP 25-02-2014 11:48 2315297

В Фортране можно проще (по крайней мере, по части записи):

1. Читаем число
2. print в символьную переменную
3. Меняем местами две позиции в этой переменной.

В С не секу, но вроде там тоже "печать" в переменную возможна.

Tau_0 25-02-2014 15:00 2315437

Цитата:

Цитата torauma
Возможно, нужно записать цифры в обратном порядке »

А если у нас Римские цифры, то как быть...???... :lamer:

Iska 25-02-2014 15:21 2315457

Цитата:

Цитата Tau_0
А если у нас Римские цифры, то как быть...???... »

Так же, как с иероглифами, клинописью и кипу.

Tau_0 25-02-2014 15:51 2315473

Цитата:

Цитата Iska
Так же, как с иероглифами, клинописью и кипу. »

И какое представление группы перестановок можно в иероглифе навести, чтобы инвертированную цифру получить. --- Может на уши его поставить…???...

torauma 25-02-2014 16:16 2315489

Цитата:

Цитата Tau_0
И какое представление группы перестановок можно в иероглифе навести, чтобы инвертированную цифру получить. --- Может на уши его поставить…???... »

Если сможете привести определение понятий "инвертированная цифра" и "представление группы перестановок", то можно будет и над иероглифами подумать.

Tau_0 25-02-2014 18:56 2315581

Цитата:

Цитата torauma
Если сможете привести определение понятий "инвертированная цифра" и "представление группы перестановок", то можно будет и над иероглифами подумать. »

Пожалуйста --- вкратце кое-какие определения есть...
Группы и их представления это из алгеры.
Группа перестановок
Представления перестановок, например, для кристаллографии хороши…

С числами понятно --- это из теории чисел…

Ивертированная 1 или 0 --- с ними тоже несложно. Восходят к разделу математической логики (узкое исчисление предикатов) в упрощении к Булевой логике/алгере… --- Отрицанием FALSE является TRU и наоборот…
Можно и целое число подобно арабскому по любому основанию, начиная с 2 разложить. Правда со строгим определением туговато, но выкрутиться можно, чтобы 0 и 1 трактовать, как антиподы и инвертировать друг в друга.

А вот инвертировать просто трехзначную цифру сумели разве что нумерологи и провели Ось Мира…
Метод числовых "зеркал":gigi::gigi::gigi:

Просто мне этот термин инвертированная цифра дюже не понравился… Уж поначалу захотелось в двоичное представление перевести и биты инвертировать... А затем обратно в десятичное --- совсем это не гуд, если ещё дополнительный код за уши притянуть...

Iska 25-02-2014 19:25 2315599

Цитата:

Цитата Tau_0
Уж поначалу захотелось в двоичное представление перевести и биты инвертировать... »

Аналогично ;), коллега.

Drongo 25-02-2014 19:49 2315611

Легко решается через динамический массив.
1. Вычисляем "длину" числа
2. Создаём массив ёмкостью в количество разрядов в числе
3. Отрываем разряды с заносом в массив
4. Выводим массив начиная с конца.

Или если не консольное приложение, допустим у нас есть
Edit - куда пишется число (строка чисел любого представления)
Label - куда будем выводить инвертированое число.
Button - кнопка по нажатию на которую будет происходить считывание и вывод итогового результата.

Код:

#include "strutils.hpp" // Подключаем. Нужно для функции ReverseString()
...
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  String number = Edit->Text; // умышленно храним число как текст
  Label->Caption = ReverseString(number); // "переворачиваем" строку
}


torauma 26-02-2014 09:24 2315843

Цитата:

Цитата Tau_0
Просто мне этот термин инвертированная цифра дюже не понравился… »

Ну это, скорее всего, претензии к преподу, давшему alena_lep задание.
Цитата:

Цитата Tau_0
трехзначную цифру »

А вот этот термин уже мне не нравится. Цифры трехзначными не бывают.
Цитата:

Цитата Tau_0
Уж поначалу захотелось в двоичное представление перевести и биты инвертировать... »

Тоже о таком варианте подумал, но как то больше склоняюсь к той трактовке, которую упомянул выше. Да и с побитовым инвертированием остаются вопросы с разрядностью и значимостью левых нулей. Ведь таблицу кодирования можно записать так
Код:

dec                bin
0                0
1                1
2                10
3                11
4                100
5                101
6                110
7                111
8                1000
9                1001

или так:
Код:

dec                bin
0                0000
1                0001
2                0010
3                0011
4                0100
5                0101
6                0110
7                0111
8                1000
9                1001

Для случая кода фиксированной длины, задача побитового ивертирования элементарно решается операцией "исключающее или".
Цитата:

Цитата Drongo
Легко решается через динамический массив. »

Алгоритмически легко, но вот учитывая что
Цитата:

Цитата alena_lep
(язык С) »

идея использовать массив несколько теряет свою привлекательность.

Tau_0 26-02-2014 14:10 2316001

Цитата:

Цитата torauma
Ведь таблицу кодирования можно записать так »

А я вот так последнюю строчку Вашей таблицы модифицирую...
Код:

hex                      bin
----                    ----
9                    1001      ===>  по условию три цифири...
999                  1001 1001 1001 ===> побитовая инверсия
666                  0110 0110 0110 ===> дизъюнкзия
-------------------------------------------------------------------------
FFF                  1111 1111 1111

Воистину --- это бесовская задачка…:angel:


Время: 06:06.

Время: 06:06.
© OSzone.net 2001-