var
f,f1: Text;
a,s,t,u,i: Integer;
begin
Assign(f, 'input.txt');
Reset(f);
Assign(f1, 'output.txt');
Rewrite(f1);
Readln(f, a);
u := 0; // уровень
Writeln(f1, a); // считываем число из файла
repeat // понеслась
s := 0; // тут будет текущего числа палиндром
t := a; // тут храним само число
i := -1; // здесь будет счётчик цифр в числе
while a > 0 do
begin
a := a div 10;
Inc(i); // типо цифры посчитали
end;
a := t;
while a > 0 do
begin
s := s + round((a mod 10)*exp(i*ln(10))); // сделали палиндром
a := a div 10;
Dec(i);
end;
a := t;
if a <> s then // проверили условие
begin
Writeln(f1, s, ' + ', a, ' = ', s+a); // это так, для себя написал - промежуточные результаты контролировать
Inc(u);
a := a + s;
end;
until a = s; // закончили
Writeln(f1, u); // записали результат
Close(f);
Close(f1);
end.
Палиндромы
Есть задача следующего характера:
Цитата:
Задано натуральное М. Если число не палиндром – записываем его в обратном порядка и слагаем с заданным. Действия повторяем до тех пор, пока не получим число-палиндром. количество выполненных операций назовем уровнем палиндромности заданного числа.ла М.
Найти уровень палиндромности заданного числа М.
Ввод-вывод данных через текстовый файл.
Найти уровень палиндромности заданного числа М.
Ввод-вывод данных через текстовый файл.
Имеется решение к вышеописанной задачке:
Код:
Алгоритм работает неправильно. Ткните носом в ошибку :o
Цитата: sherry
Алгоритм работает неправильно.
А в чём выражается неправильность? Я ошибки не вижу.
Какие исходные данные, что должно было получиться и что получилось?
В том-то и проблема, что природа ошибки мне неизвестна.. И контр-примеров нет :( Человек говорит, что неправильно и всё тут. А где неправильно и на каком примере падает - молчит. Я в растерянности..
a=0 s=0 должно получиться s=0, u=0 Ok
Контрольный пример 2
a=1 (палиндром) s=1
Если 10004 ещё допустимо, то произойдёт переполнение. Возможно это и есть ошибка.
входящий параметр ограничен: 0 < a < 10000
на s := s + round((a mod 10)*exp(i*ln(10)))/10 и i=-1 на i=0;
результат не изменится.
я специально даю переменной i значение -1, чтобы потом избегать деления на 10. попробуйте потестить.