| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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, ты крут |