Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > Перестановка цифр двухзначного числа |
Автор: Dello 28.11.2007, 21:23 |
Задание звучит так: поменять местами цифры двухзначного числа, не используя свойства позиционной системы счисления. Т.е., насколько я понял, надо применять побитовые операции, т.к. инструментарий, который можно использовать - это операции и инструкции С++. Помогите, пожалуйста. |
Автор: MAKCim 28.11.2007, 22:05 |
перевести в строку изменить порядок следования символов перевести обратно в число |
Автор: JackYF 28.11.2007, 22:06 |
Ответ звучит так: если от тебя кода не будет, то тебе прямая дорога в Центр Помощи. |
Автор: cardinal 28.11.2007, 22:07 | ||
Так на скорую руку... |
Автор: MAKCim 28.11.2007, 22:09 |
cardinal, имхо, тут используется |
Автор: Dello 28.11.2007, 22:12 |
Люди, вы читать умеете? Черным по белому написано: не используя свойства позиционной системы счисления. Нельзя переводить в строку. Использовать побитовые операции. Мне кажется, деление на 10 - это использование позиционной СС, перевод в строку - не очень побитовая операция. Я не прав? |
Автор: MAKCim 28.11.2007, 22:15 |
Dello, ты этого не написал в своем первом посте это ты так решил или тебе сказали? ![]() |
Автор: JackYF 28.11.2007, 22:17 |
Я, конечно, извиняюсь, но задание звучит так: нарубите, пожалуйста, дров, только деревьев и топора нет. Число - это всего лишь биты в памяти. Каким образом, не зная основы системы счисления, можно поменять цифры в числе? |
Автор: bsa 28.11.2007, 22:18 |
Dello, как вводятся данные? В какой системе счисления? Если данные вводятся в виде строки, то можно просто поменять символы. Если данные вводятся в 16-ти, 8-ми или двоичной системах счисления, то можно использовать сдвиги и побитовые AND и OR. |
Автор: Dello 28.11.2007, 22:21 | ||
MAKCim,
сказали. Добавлено через 3 минуты и 7 секунд JackYF, полностью согласен. ![]() bsa В десятичной. Строки нельзя использовать. |
Автор: bsa 28.11.2007, 22:24 |
Dello, вот найди того, кто сказал и пусть объяснит поподробней. |
Автор: MAKCim 28.11.2007, 22:25 |
Dello, имхо, в 10-ой СС это никак не сделаешь |
Автор: MAKCim 28.11.2007, 22:53 | ||
|
Автор: bsa 28.11.2007, 22:54 |
MAKCim, не лень было? |
Автор: MAKCim 28.11.2007, 22:55 |
неа ![]() 3 минуты драгоценного времени |
Автор: cardinal 28.11.2007, 23:20 |
Я если честно так и не понял, где я использовал строки или Какие свойства? И что они в коде MAKCim'а не используются? |
Автор: MAKCim 28.11.2007, 23:24 |
делишь на 10, чтобы получить десятичный разряд да вроде как нет |
Автор: cardinal 28.11.2007, 23:49 |
Так а где здесь "строки", они же char* они же string? Так на дело смотреть, так и у тебя цифра 10 присутствует. Или просто задание звучит так: сделать!, но не просто, а через жопу? ![]() |
Автор: MAKCim 28.11.2007, 23:55 |
строки не причем ты используешь свойство позиционной СС 10 - это смещение в массиве т. к двузначных чисел всего 90 первое двузначное число - 10, а индекс в массиве начинается с 0 т. е 10 здесь используется совсем не в контексте позиционной СС |
Автор: cardinal 29.11.2007, 00:40 |
Почитал тут http://works.tarefer.ru/69/100903/index.html помоему понял что хотят, а именно "перевернуть двухзначное число, рассматривая его как строку, но не пользуясь строками" ![]() Помоему забить все это в массив как-то неэлегантно... Но что-то придумать как добиться этого результата при помощи побитных операций не использую свойств позиционной СС не могу. ![]() |
Автор: Dims 29.11.2007, 08:47 |
В задании ведь не сказано, что число десятичное ![]() Так что, можно положить, что оно 16-ричное. Поэтому, надо просто отсечь маской старший байт и сдвинуть младший влево на 4 бита, а затем побитово сложить со сдвинутым вправо на 4 бита исходным числом. |
Автор: cardinal 29.11.2007, 10:01 |
В задании не сказано, а автором сказано А в десятичной все нет так просто. Достаточно посмотреть на числа 8 и 9 ![]() |
Автор: bsa 29.11.2007, 15:23 |
с другой стороны, кто мешает интерпретировать 10-ичное, как 16-ричное? |
Автор: JackYF 29.11.2007, 16:26 | ||
никто... результат будет неправильный. |
Автор: bsa 29.11.2007, 18:17 |
"15" - это сколько? можно представить, что это 0x15? затем методом сдвигов и логических OR и AND объединяем и получаем 0x51, выводим, получаем "51" - то что хотели? ![]() |
Автор: cardinal 29.11.2007, 21:23 |
Нет, т.к. строками пользоваться нельзя... ![]() |
Автор: bsa 29.11.2007, 21:35 |
cardinal, а вводить тогда как?!? программа читает из бинарного файла число? |
Автор: JackYF 29.11.2007, 23:35 |
ага, scanf тоже пользуется тем, что система счисления десятичная ![]() |
Автор: SergeCpp 30.11.2007, 12:49 | ||
Расширение диапазона предлагается как упражнение для господ интересующихся ![]() |
Автор: MAKCim 30.11.2007, 13:13 |
SergeCpp, ты крут ![]() ![]() |