如何检查pascal中的数字是否重复?

时间:2014-02-06 15:23:59

标签: numbers pascal

我想制作一个程序,我将检查是否有任何Armstron数字(数字等于它的数字的立方体,例如153)。

这也是完美的数字(数字等于它的除数之和,不包括它自身,例如28(1 + 2 + 4 + 7 + 14)) 因此我做了一个程序,看看一个数字是否是阿姆斯特朗的数字,看看它是否是完美的数字。

program Armstrong;

var i,n,j,d,s,p:integer;

begin

  for i:=1 to 1000 do
  begin
   j:=i mod 10;
   d:=i div 10 mod 10;
   s:=i div 100;
   n:=j*j*j+d*d*d+s*s*s;

   if n=i then
    writeln(i);
  end;
end.

对于完美的数字,它是

program Perfect;

var n,s,i:integer;

begin
  for n:=1 to 1000 do
  begin
   s:=0;

   for i:=1 to n do
   begin
    if n mod i = 0 then
     s:=s+i;
   end;

   if s=n then
    writeln(n);
  end;
end.

所以我不知道如何合并它们,看看我从第一个程序得到的任何数字是否也出现在第二个程序中。

1 个答案:

答案 0 :(得分:0)

我做了很长时间的Pascal。所以假设我已经使用pseudo code作为答案。

从Armstrong中删除你的循环并将代码放在这个函数中。

function Armstrong(i: integer): integer;
   (* code goes here. And return 0 or 1 based on Armstrong *)

从Perfect中删除你的循环,并将此代码放在此函数中

function Perfect(i: integer): integer;
   (* code goes here. And return 0 or 1 based on Perfect *)

然后从这样的循环中调用它:

for i:=1 to 1000 do
  x = Armstrong(i);
  y = Perfect(i);
  if(x == 1 and y == 1) then
    (* do something *)
end;