在处理完美数字时我发现了意想不到的数字

时间:2012-09-29 19:49:33

标签: pascal

我的代码打印“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.

2 个答案:

答案 0 :(得分:2)

我认为你需要将if(temp=number)部分拉出内部for循环。

由于1 + 2 + 3 + 4 + 6 + 8为24,因此您获得number=24i=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)