На промежутке найти числа, сумма цифр которых равна корню n-ой степени из этого числа: найти ошибку - Free Pascal
Формулировка задачи:
На заданном числовом промежутке требуется найти все числа, сумма цифр каждого из которых равна корню n-й степени из этого числа, где n - количество цифр числа.
Вот все числа: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 81, 512, 2401. Но при вводе, например, промежутка от 600 до 1000 программа "молчит", а надо вывести, мол таких чисел нет.
uses crt;
var m,n,i,j,sum,step,x: longint;
c: integer;
s,s2:string;
Begin
repeat
clrscr;
writeln('vvedite nashalo otrezka');
readln(n);
writeln('vvedite konec otrezka');
readln(m);
until m>n;
for i:=n to m do begin
str(i,s);
for j:=1 to length(s) do begin
val(s[j],x,c);
sum:=sum+x;
end;
step:=sum;
for j:=1 to length(s) do
step:=step*sum;
str(step,s2);
if s=s2 then
write(s,' ') ;
sum:=0;
end;
readln;end.Решение задачи: «На промежутке найти числа, сумма цифр которых равна корню n-ой степени из этого числа: найти ошибку»
textual
Листинг программы
step:=sum; for j:=1 to length(s)-1 do step:=step*sum; str(step,s2);
Объяснение кода листинга программы
- Переменная
sumинициализируется значением 1. - Переменная
stepинициализируется значениемsum. - Запускается цикл
for, который выполняется от 1 доlength(s)-1(гдеs- это строка, содержащая число). - Внутри цикла перемножается значение переменной
stepна значение переменнойsum. - Результат умножения присваивается переменной
step. - После окончания цикла значение переменной
stepпреобразуется в строку и присваивается переменнойs2.