Новые сообщения · Правила  
Страница 1 из 11
Модератор форума: Berestovskiy 
Форум ПРОГРАММИСТОВ » ПРОГРАММИРОВАНИЕ » Паскаль » "Обращение числа"
"Обращение числа"
На уроке информатики Петя научился переводить целые числа из одной системы счисления в другую. Особенно ему понравилось переводить числа из десятичной системы счисления в семеричную и обратно. Однажды он задумался, как будет выглядеть число, если его перевести в семеричную систему счисления, затем результат переписать в обратном порядке (т.е. последнюю цифру поменять местами с первой, предпоследнюю — со второй и т.д.), а потом снова перевести полученное число в десятичную систему. Петя перевел число 15 в систему счисления с основанием 7 и получил 21(7), полученную запись перевернул, получилось число 12(7), обратный перевод результата в десятичную систему счисления дат 9. Он может пока работать только с небольшими числами и делает это довольно медленно. Помогите ему, напишите программу, которая сможет производить описанные действия с любыми натуральными числами.
Входные данные: В единственной строке входного файла записано одно натуральное число N (1 <=N<= 109 ).
Выходные данные: В выходной файл нужно вывести единственное целое число — результат преобразования числа N, заданного во входном файле.

Примеры:

input.txt output.txt
15 9
3 3

1 | Автор: anel85 | 2010-10-14, 14:53   |  Репутация: [ + 0 ]
Code
var i, k: integer;
     s, s1: string;
{функция перевода в семеричную систему}
function to_seven (x: integer): string;
var res: string;
     a: integer;
begin
res:='';
while x>0 do
begin
   a:=x mod 7;
   if a<10 then
   res:=chr(ord('0')+a)+res
   else
   res:=chr(ord('A')+a-10)+res;
   x:=x div 7;
end;
to_seven:=res;
end;
{функция перевода из семеричной системы}
function from_seven(x: string): integer;
var res: integer;
begin
res:=0;
while x<>'' do
begin
   res:=res*7;
   if x[1] in ['0'..'9'] then
   res:=res+ord(x[1])-ord('0')
   else
   res:=res+ord(upcase(x[1]))-ord('A')+10;
   delete(x,1,1);
end;
from_seven:=res;
end;

begin
readln(k);
s:=to_seven(k);
s1:='';
{оборот числа}
for i:=length(s) downto 1 do
s1:=s1+s[i];
writeln(from_seven(s1));
readln;
end.


If you can't make it GOOD make it LOOK GOOD. B.Gates
2 | Автор: DoVe | 2010-10-14, 16:48   |  Репутация: [ + 48 ]
Форум ПРОГРАММИСТОВ » ПРОГРАММИРОВАНИЕ » Паскаль » "Обращение числа"
Страница 1 из 11
Поиск: