Проблема в строке c:= (b*b*b); Ты ищешь сумму кубов, а для 4-значных чисел нужно искать сумму 4-х степеней. Нужно проверять число а: если от 100 до 999, то выполняем c:= (b*b*b); а если от 1000 до 9999, то выполняем c:= (b*b*b*b);
Код ниже работает и выдаёт результат: число Армстронга ==> 153 число Армстронга ==> 370 число Армстронга ==> 371 число Армстронга ==> 407 число Армстронга ==> 1634 число Армстронга ==> 8208 число Армстронга ==> 9474
var a,b,c,d,a2:integer; begin for a:=100 to 9999 do begin d:=0; a2:=a; while (a2 <> 0) do begin b:= a2 mod 10; a2:= a2 div 10; if a<1000 then c:= (b*b*b) else c:= (b*b*b*b); d:= d+c; end; if (a = d) then writeln('число Армстронга ==> ', a); end; end.
program raf105;
var abc,ab,bc:integer;
begin
write('Введите трёхзначное число: ');
readln(abc);
ab:= abc mod 100;
bc:= abc div 10;
if ab = bc
then writeln('Число состоит из одинаковых цифр')
else writeln('Число не состоит из одинаковых цифр');
end.
ОбъяснениеДля выполнения задачи достаточно найти первые 2 цифры и последние 2 цифры если они равны, то число состоит из одинаковых цифр
abc mod 100 Убирает все сотни из числа.
Например было число 123, стало 23.
482 стало 82
abc div 10 Считает сколько в числе целых десяток, но не считает остаток.
Например было число 123, стало 12
482 стало 48
Сравнивание 2 первых и 2 последних цифр
253 25 и 53 не равны, значит число не состоит из одинаковых цифр
121 12 и 21 не равны, значит число не состоит из одинаковых цифр
111 11 и 11 равны, значит число состоит из одинаковых цифр
Проблема в строке c:= (b*b*b);
Ты ищешь сумму кубов, а для 4-значных чисел нужно искать сумму 4-х степеней. Нужно проверять число а: если от 100 до 999, то выполняем c:= (b*b*b); а если от 1000 до 9999, то выполняем c:= (b*b*b*b);
Код ниже работает и выдаёт результат:
число Армстронга ==> 153
число Армстронга ==> 370
число Армстронга ==> 371
число Армстронга ==> 407
число Армстронга ==> 1634
число Армстронга ==> 8208
число Армстронга ==> 9474
var a,b,c,d,a2:integer;
begin
for a:=100 to 9999 do begin
d:=0;
a2:=a;
while (a2 <> 0) do begin
b:= a2 mod 10;
a2:= a2 div 10;
if a<1000 then c:= (b*b*b)
else c:= (b*b*b*b);
d:= d+c;
end;
if (a = d) then writeln('число Армстронга ==> ', a);
end;
end.