2014-02-06 1 views
-1

Armstron 숫자 (숫자가 큐브와 같은 숫자입니다, 예 : 153)가 있는지 확인할 수있는 프로그램을 만들고 싶습니다.숫자가 파스칼 단위로 반복되는지 어떻게 확인합니까?

도 숫자가 완벽합니다. 예를 들어 28 (1 + 2 + 4 + 7 + 14)와 같이 제수의 합계에 해당하는 숫자는 이고 1000 이하입니다. 번호는 암스트롱 번호이며 완벽한 번호인지 확인하십시오.

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. 

입니다.

+0

내가 정확히 이해하지 못하는 당신 질문에 대해서는 Perfect에 대해 '부울 함수'를 수행하고 Armstrong에 대해 '부울 함수'를 수행하고 둘 다 검증 할 수 있습니다. 또 다른 방법은'array'에 첫 번째를 모두 저장하고 두 번째에 대해 동일하게 저장 한 다음'intersection'을 만드는 것입니다. –

답변

0

나는 오래 파스칼을했다. 그래서이 대답에 pseudo code을 사용했다고 가정합니다.

암스트롱에서 루프를 제거하고이 기능에 코드를 삽입하십시오.

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

는 완벽한에서 루프를 제거하고, 이런 식으로 같은 루프에서

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; 
+0

정확히 내 의견에 같은 !!!. 대신'boolean'을 반환 할 수 있습니다. –

+0

고마워요,하지만 고마워요. 예를 들어 암스트롱에서 배열까지 모든 숫자를 저장하고 완전한 숫자에서부터 다른 숫자까지 모든 숫자를 저장하고 반복되는 숫자가 있는지 확인하는 방법이 있습니까? 내가 더 많은 문제에서 사용할 수 있기 때문에 나는이 방법을 원할 것이다 – user3279503

+0

x == 1이면 암스트롱 배열에 저장한다. 만약 y == 1이면 완벽한 배열로 i를 저장하십시오. @ Vkt0rS. 요즘 파스칼에 대해 많이 모르지만 정수는 사용하지만 부울은 0/1보다는 이해하기 쉽습니다. –

관련 문제