Войти

Показать полную графическую версию : Инвертирование цифр


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

torauma
25-02-2014, 08:48
Вывести число, полученное в результате инвертирования цифр исходного числа »
Не понятно, что подразумевается под инвертированием. Возможно, нужно записать цифры в обратном порядке, тогда как то так:

#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
В Фортране можно проще (по крайней мере, по части записи):

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

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

Tau_0
25-02-2014, 15:00
Возможно, нужно записать цифры в обратном порядке »
А если у нас Римские цифры, то как быть...???... :lamer:

Iska
25-02-2014, 15:21
А если у нас Римские цифры, то как быть...???... »
Так же, как с иероглифами, клинописью и кипу.

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

torauma
25-02-2014, 16:16
И какое представление группы перестановок можно в иероглифе навести, чтобы инвертированную цифру получить. --- Может на уши его поставить…???... »
Если сможете привести определение понятий "инвертированная цифра" и "представление группы перестановок", то можно будет и над иероглифами подумать.

Tau_0
25-02-2014, 18:56
Если сможете привести определение понятий "инвертированная цифра" и "представление группы перестановок", то можно будет и над иероглифами подумать. »
Пожалуйста --- вкратце кое-какие определения есть...
Группы и их представления это из алгеры.
Группа перестановок (http://synset.com/ru/Группа_перестановок)
Представления перестановок, например, для кристаллографии хороши…

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

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

А вот инвертировать просто трехзначную цифру сумели разве что нумерологи и провели Ось Мира…
Метод числовых "зеркал" (http://kaa-07.narod.ru/NUM/Zerkalo1.html):gigi::gigi::gigi:

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

Iska
25-02-2014, 19:25
Уж поначалу захотелось в двоичное представление перевести и биты инвертировать... »
Аналогично ;), коллега.

Drongo
25-02-2014, 19:49
Легко решается через динамический массив.
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
Просто мне этот термин инвертированная цифра дюже не понравился… »
Ну это, скорее всего, претензии к преподу, давшему alena_lep задание.
трехзначную цифру »
А вот этот термин уже мне не нравится. Цифры трехзначными не бывают.
Уж поначалу захотелось в двоичное представление перевести и биты инвертировать... »
Тоже о таком варианте подумал, но как то больше склоняюсь к той трактовке, которую упомянул выше. Да и с побитовым инвертированием остаются вопросы с разрядностью и значимостью левых нулей. Ведь таблицу кодирования можно записать так
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

Для случая кода фиксированной длины, задача побитового ивертирования элементарно решается операцией "исключающее или".
Легко решается через динамический массив. »
Алгоритмически легко, но вот учитывая что
(язык С) »
идея использовать массив несколько теряет свою привлекательность.

Tau_0
26-02-2014, 14:10
Ведь таблицу кодирования можно записать так »
А я вот так последнюю строчку Вашей таблицы модифицирую...

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

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




© OSzone.net 2001-2012