Перевод десятичного числа в двоичную, троичную...

 
0
 
Delphi, Kylix and Pascal
ava
zetxi815eb | 26.01.2007, 23:54
Вот условье самой задачи:
Задача A. "Палиндром".
Входной файл input.txt
Выходной файл output.txt
Ограничение по времени 1 секунда на тест
Ограничение по памяти 4096К байт
Натуральное число называется палиндромом, если оно читается слева направо и справа налево одинаково. Известно, что для любого натурального числа можно подобрать такую систему счисления, в которой это число является палиндромом. Например, число 15 записывается в двоичной системе счисления как 1111 и является палиндромом.
Вход
В первой строке входного файла записано натуральное число N (N < 2^31).
Выход
Запишите в выходной файл наименьшее основание системы счисления, в которой N является палиндромом.
Примеры входа и выхода
input.txt output.txt
2 3
input.txt output.txt
11 10

В Паскале мне раньше не приходилось переводить числа из одной системы в другую.

Подскажите по какой формуле это делать? Какой тип использовать?? Ведь N имеет тип longint.
Помогуте, плиз, желательно с коментариями...мне не столько важно решить эту задачу... я просто хочу разобраться в методе её решения.
Ответы (6)
ava
Magister Y0da | 27.01.2007, 01:26 #
где-то на форуме SoWa вроде выкладывал свой модуль перевода чисел из любой системысчисления в любую

Поищи :p
ava
zetxi815eb | 27.01.2007, 03:50 #
Magister Y0da, а можешь дать ссылку на этот форум?
ava
volvo877 | 27.01.2007, 04:11 #
zetxi815eb,

FAQ тебе в помощь: http://vingrad.ru/DELPHI-DLP-001153
(правда, решение на Дельфях, но алгоритм-то остается... Можешь еще в поиске по разделу Паскаль ввести слово "счисления" - получишь ссылки на несколько интересных тем... Ну, и ссылки в самом низу этой вот страницы, которую ты сейчас читаешь smile )
ava
zetxi815eb | 27.01.2007, 17:37 #
Вот...нашёл я наконец эту функцию:

uses crt;
function FromDec(n, radix:longint):string;
var s: String;
const digit: string[16]='0123456789ABCDEF';
begin
s:='';
repeat
s:=digit[(n mod radix)+1]+s;
writeln ('s:=',s);
n:=n div radix;
until n=0;
FromDec:=s;
end;


var a,b,c:longint;
t:string;
begin
clrscr;
a:=999999; b:=2;
t:=FromDec(a,b);
writeln (t);
readkey;
end.


Люди...вот только я не пойму как работает 8-я строчка...можете обьяснить?
ava
volvo877 | 27.01.2007, 18:06 #
s:=digit[(n mod radix)+1]+s;

Эта? :)

сначала находится последняя цифра числа (это n mod radix, остаток от деления на основание с/с), но поскольку нумерация символов в строке в Турбо Паскале начинается с 1, а не с 0, а нам фактически нужна позиция символа в строке, представляющего заданное число в системе счисления с основанием radix, то мы к этой самой цифре прибавляем 1...

Дальше - строка преобразуется от конца числа к началу, поэтому, тот символ в новой с/с, который мы вытащили из строки (вот так: digit[(n mod radix)+1]), надо "прилепить" к старой строке-результату спереди, что и делается - сначала символ, потом строка. Результат опять же запоминается в той же строке...

Ну, и в 10-ой строке мы делим число нацело на основание с/с, чем "убираем" последнюю цифру, и процесс продолжается вновь... Пока число не превратится в 0...
ava
Letov | 31.03.2007, 12:13 #
Перевод дробного числа D (т.е любого) в p-ичную систему происходит по следующему алгоритму:
1.Умножить D на p;
2.Целую часть произведения представить соответствующей цифрой p-ичного представления;
3.Умножать D на p до тех пор, пока не будет достигнута требуемая точность (получится p-ичное число с k дробными разрядами) или дробная часть обратится в ноль.
Зарегистрируйтесь или войдите, чтобы написать.
Фирма дня
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Участники
advanced
Отправить