我的代码打印“6 24 24 24 24 28 496”。我不想要24岁。我该如何解决这个问题?
program perfect;
uses crt;
var i,number,temp:integer;
begin
clrscr;
for number:=2 to 999 do begin
temp:=1;
for i:=2 to Trunc(number/2) do begin
if (number mod i = 0) then
temp:=temp+i;
if(temp=number) then
writeln(number);
end;
end;
readln;
end.
答案 0 :(得分:2)
我认为你需要将if(temp=number)
部分拉出内部for
循环。
由于1 + 2 + 3 + 4 + 6 + 8为24,因此您获得number=24
和i=8, 9, 10, 11
的输出。
答案 1 :(得分:2)
你应该移动if语句。 代码应该是:
program perfect;
var i,number,temp:integer;
begin
for number:=2 to 999 do begin
temp:=1;
for i:=2 to Trunc(number/2) do begin
if (number mod i = 0) then
temp:=temp+i;
//Instead of here
end;
//Here
if(temp=number) then
writeln(number);
end;
readln;
end.
在那种形式下,它运作良好(我有6,28和496)