0 / 0 / 0
Регистрация: 08.06.2014
Сообщений: 9
|
|
1 | |
Написать программу, которая переводит число из десятичной системы счисления в позиционную систему счисления24.02.2016, 20:30. Показов 4307. Ответов 12
Помогите написать программу, которая переводит число из десятичной системы счисления в позиционную систему счисления. Цифра в самом младшем (нулевом) разряде этой системы счисления может принимать значения A, 0, 1,
где буква A соответствует -1. Цифра в первом разряде может принимать значения B, A, 0, 1, 2, где буква A соответствует -1, а буква B соответствует -2. Цифра во втором разряде может принимать значения C, B, A, 0, 1, 2, 3, цифра в третьем разряде может принимать значения D, C, B, A, 0, 1, 2, 3, 4 и т. д. В этой системе счисления десятичные числа от -6 до 6 представляются как B0, B1, AA, A0, A1, A, 0, 1, 1A, 10, 11, 2A, 20. Нужна программа или хотя бы наводка
0
|
24.02.2016, 20:30 | |
Ответы с готовыми решениями:
12
Составить программу, которая переводит число из десятичной системы счисления в двоичную в обратном порядке ( 2 Написать программу, которая переводит число из 13-й системы счисления в 3-ю через 10-ю Написать программу, которая переводит число из 4-й системы счисления в 14-ю через 10-ю Написать функцию, которая переводит число в другую систему счисления |
0 / 0 / 0
Регистрация: 08.06.2014
Сообщений: 9
|
|
24.02.2016, 21:25 [ТС] | 2 |
Что это значит?
0
|
Вездепух
12445 / 6542 / 1757
Регистрация: 18.10.2014
Сообщений: 16,498
|
|
24.02.2016, 21:42 | 3 |
(Это значит "я написал ерунду и решил удалить свое сообщение")
Итак. Сначала надо заметить, что веса разрядов в таковой системе счисления будут следующими: 1, 3, 15, 105, 945, ... Как и в любой позиционной системе счисления, вес каждого следующего разряда равен весу предыдущего разряда, умноженного на количество значений в предыдущем разряде. Там образом разряды, взятые по отдельности, могут предоставлять следующие значения (нумеруя разряды с 0) Разряд 0: -1, 0, 1 Разряд 1: -6, -3, 0, 3, 6 Разряд 2: -45, -30, -15, 0, 15, 30, 45 Разряд 3: -420, -315, -210, -105, 0, 105, 210, 315, 420 ... Перевод произвольного числа N в эту систему счисления можно производить "лобовым" алгоритмом, применимым к любой системе счисления: 1. Берем исходное число N и находим ближайшее к нему число D, представимое одним разрядом (т.е. из списка выше). Используем этот разряд. 2. Вычитаем из исходного числа N число D: N = N - D 3. Переходим на шаг 1, пока N не превратится в 0 Например, переведем в эту систему счисления число 181: - Для 181 ближайшим одноразрядным числом является число 210. Это разряд 3, цифра 2. Итого получаем 2***. Остаток 181 - 210 = -29 - Для -29 ближайшим одноразрядным числом является число -30. Это разряд 2, цифра B. Итого получаем 2B**. Остаток -29 - -30 = 1 - Для 1 ближайшим одноразрядным числом является число 1. Это разряд 0, цифра 1. Итого получаем 2B01. Остаток 0. Все. В таком алгоритме самое неприятное - это поиск ближайшего одноразрядного числа. Я пока не вижу остроумных способов решения этой задачи. Т.е. пока предлагается просто тупо (или почти тупо) генерировать все одноразрядные числа в поиске ближайшего. Это не сложно.
1
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
||||||
24.02.2016, 23:40 | 4 | |||||
1
|
Вездепух
12445 / 6542 / 1757
Регистрация: 18.10.2014
Сообщений: 16,498
|
||||||
25.02.2016, 02:05 | 5 | |||||
Вот, например, реализация алгоритмом сверху-вниз
1
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
|
25.02.2016, 06:07 | 6 |
0
|
Вездепух
12445 / 6542 / 1757
Регистрация: 18.10.2014
Сообщений: 16,498
|
|
25.02.2016, 06:47 | 7 |
Что именно вы имеете в виду? Что где-то у меня возникает арифметическое переполнение? Или что начиная с 9-го разряда цифр '1'..'9' уже не хватает, ибо появляются "цифры" '10' и выше?
0
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
|
25.02.2016, 07:41 | 8 |
А вы не тестировали что ли?
Цифр-то для интов хватит, а похоже на переполнение. INT_MAX / 7 еще считает, а INT_MAX / 6 уже нет.
0
|
0 / 0 / 0
Регистрация: 08.06.2014
Сообщений: 9
|
|
25.02.2016, 14:40 [ТС] | 9 |
А веса разрядов не должны быть равны степеням тройки (1, 3, 9, 27, 81...)?
0
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
|
25.02.2016, 15:21 | 10 |
Ну, тогда бы хватило трех цифр, остальные были бы излишними, а представления чисел неоднозначными.
1
|
0 / 0 / 0
Регистрация: 08.06.2014
Сообщений: 9
|
|
25.02.2016, 16:00 [ТС] | 11 |
Спасибо всем!
Добавлено через 5 минут Еще вопрос. Можно ли как-то определить количество цифр в числе, записанном в этой системе счисления, не переводя?
0
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
|
25.02.2016, 16:45 | 12 |
Ну, в моей программе в каждой итерации цикла вместо вычисления и добавления цифры в результат просто инкрементируйте счетчик, и получите количество цифр.
0
|
Вездепух
12445 / 6542 / 1757
Регистрация: 18.10.2014
Сообщений: 16,498
|
|
25.02.2016, 17:26 | 13 |
Преимуществом алгоритма перевода "сверху-вниз" в частности является то, что разряды генерируются в привычном порядке - от старших к младшим - и количество разрядов результата известно уже в начале работы алгоритма. В моем варианте первый цикл занимается как раз этим. После выполнения первого цикла переменная 'digit_index' как раз и будет содержать индекс старшего значащего разряда, т.е. фактически определять длину числа.
Разумеется, интересно было бы найти аналитическую формулу для определения длины числа, т.е. "сразу" без цикла. Для "обычных" систем счисления это делается просто через логарифм, а вот для такой хитрой системы есть ли прямая формула - не знаю.
1
|
25.02.2016, 17:26 | |
25.02.2016, 17:26 | |
Помогаю со студенческими работами здесь
13
Написать программу, которая переводит число в систему счисления с основанием 10 Написать программу, которая переводит заданное положительное число в р-ичную систему счисления (р<16) Создать программу, которая переводит числа из десятичной системы счисления в двоичную Написать программу которая будет переводить числа из 14-ой системы счисления в 8-ую систему счисления Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |