Вопрос № 129017: Здравствуйте уважаемые эксперты. Помогите пожалуйста в решении вопроса № 129014 Задачка на системы счисления: даны два натуральных числа D и N (2<=n<=16) Организовать перевод целого десятичного числа D в N-ичную систему счис...
Вопрос № 129.017
Здравствуйте уважаемые эксперты.
Помогите пожалуйста в решении вопроса № 129014
Задачка на системы счисления: даны два натуральных числа D и N (2<=n<=16) Организовать перевод целого десятичного числа D в N-ичную систему счисления. Решение неоюходимо на Basic или Pascal Заранее благодарю.
Отправлен: 25.03.2008, 16:31
Вопрос задал: Lommm (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: HookEst
Здравствуйте, Lommm!
Алгоритм перевода десятичных чисел в другие основания, сейчас кажется в школе изучают. Просто делим нацело число D на новое основание N, и остаток записываем. Получившийся результат снова делим на N остаток записываем слева от предыдущего и т.д... делим пока не получится ноль, записывая остатки справа налево.
Все что записали и будет искомым представление числа D в N-ичной системе счисления.
Так и делаем, в коде, у Вас написано про натуральные числа, но я заодно учел и отрицательные
Диалект Basic-а не знаю, делал просто в Excel:
'Символы используемые для записи чисел
Const CHARS = "0123456789ABCDEF"
'функция возвращает строковое представление целого числа D в N-ичной системе счисления
'2<=N<=16 - иначе возвращается пустая строка
Function Radix(ByVal D As Long, ByVal N As Long) As String
Dim sign As String
Dim r As Long
'проверка N
If N < 2 Or N > 16 Then Exit Function
'сохраняю знак и убираю его если есть, чтобы не мешался
If D < 0 Then sign = "-"
D = Abs(D)
'цикл пока есть что делить
Do
'остаток
r = D Mod N
'частное
D = D N
'записываем остаток, используя символы из CHARS
Radix = Mid(CHARS, r + 1, 1) & Radix
Loop Until D = 0
'если 0 возвращаем "0", иначе - восстанавливаем знак
If Radix = "" Then Radix = 0 Else Radix = sign & Radix
End Function
Успехов.
Ответ отправил: HookEst (статус: Специалист)
Ответ отправлен: 26.03.2008, 11:12 Оценка за ответ: 5