Показать полную графическую версию : Инвертирование цифр
alena_lep
24-02-2014, 20:34
Здравствуйте. Помогите решить задачу. Не могу разобраться с тем, что конкретно нужно сделать. Дано трехзначное число. Вывести число, полученное в результате инвертирования цифр исходного числа (язык С). Помогите пожалуйста с алгоритмом.
Вывести число, полученное в результате инвертирования цифр исходного числа »
Не понятно, что подразумевается под инвертированием. Возможно, нужно записать цифры в обратном порядке, тогда как то так:
#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. Меняем местами две позиции в этой переменной.
В С не секу, но вроде там тоже "печать" в переменную возможна.
Возможно, нужно записать цифры в обратном порядке »
А если у нас Римские цифры, то как быть...???... :lamer:
А если у нас Римские цифры, то как быть...???... »
Так же, как с иероглифами, клинописью и кипу.
Так же, как с иероглифами, клинописью и кипу. »
И какое представление группы перестановок можно в иероглифе навести, чтобы инвертированную цифру получить. --- Может на уши его поставить…???...
И какое представление группы перестановок можно в иероглифе навести, чтобы инвертированную цифру получить. --- Может на уши его поставить…???... »
Если сможете привести определение понятий "инвертированная цифра" и "представление группы перестановок", то можно будет и над иероглифами подумать.
Если сможете привести определение понятий "инвертированная цифра" и "представление группы перестановок", то можно будет и над иероглифами подумать. »
Пожалуйста --- вкратце кое-какие определения есть...
Группы и их представления это из алгеры.
Группа перестановок (http://synset.com/ru/Группа_перестановок)
Представления перестановок, например, для кристаллографии хороши…
С числами понятно --- это из теории чисел…
Ивертированная 1 или 0 --- с ними тоже несложно. Восходят к разделу математической логики (узкое исчисление предикатов) в упрощении к Булевой логике/алгере… --- Отрицанием FALSE является TRU и наоборот…
Можно и целое число подобно арабскому по любому основанию, начиная с 2 разложить. Правда со строгим определением туговато, но выкрутиться можно, чтобы 0 и 1 трактовать, как антиподы и инвертировать друг в друга.
А вот инвертировать просто трехзначную цифру сумели разве что нумерологи и провели Ось Мира…
Метод числовых "зеркал" (http://kaa-07.narod.ru/NUM/Zerkalo1.html):gigi::gigi::gigi:
Просто мне этот термин инвертированная цифра дюже не понравился… Уж поначалу захотелось в двоичное представление перевести и биты инвертировать... А затем обратно в десятичное --- совсем это не гуд, если ещё дополнительный код за уши притянуть...
Уж поначалу захотелось в двоичное представление перевести и биты инвертировать... »
Аналогично ;), коллега.
Легко решается через динамический массив.
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); // "переворачиваем" строку
}
Просто мне этот термин инвертированная цифра дюже не понравился… »
Ну это, скорее всего, претензии к преподу, давшему 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
Для случая кода фиксированной длины, задача побитового ивертирования элементарно решается операцией "исключающее или".
Легко решается через динамический массив. »
Алгоритмически легко, но вот учитывая что
(язык С) »
идея использовать массив несколько теряет свою привлекательность.
Ведь таблицу кодирования можно записать так »
А я вот так последнюю строчку Вашей таблицы модифицирую...
hex bin
---- ----
9 1001 ===> по условию три цифири...
999 1001 1001 1001 ===> побитовая инверсия
666 0110 0110 0110 ===> дизъюнкзия
-------------------------------------------------------------------------
FFF 1111 1111 1111
Воистину --- это бесовская задачка…:angel:
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.