• 북마크
타입문넷

질문게시판

[컴퓨터_인터넷] C언어에 대해 질문이 있습니다.

본문


과제 때문에 입력된 두 정수의 최대공약수와 최대공배수를 구하고, 음수가 입력될 경우 작업을 중단하는 프로그램을 짜고 있습니다.
지금 거의 다 되가는데, 최대공약수 부분에서 결과 출력시 모든 공약수가 다 나옵니다. 어떻게 해결해야 하는지 좀 알려주세요.

 

최대공약수를 구하는데 쓴 함수는 while 함수이며, 변수는 모두 int 변수로,

 

nNum1과 nNum2는 입력한 두 정수,

nCD는 약수,

nTemp1, nTemp2는 nCD가 두 정수의 공약수인지 판별하기 위한 임시값입니다.

 

while( nCD < nNum1 && nCD < nNum2 )
 {
  ++nCD;
  nTemp1 = nNum1%nCD;
  nTemp2 = nNum2%nCD;
  
  if( nTemp1 == 0 && nTemp2 == 0 )
  {
   printf("G.C.D of %d & %d is %d\n", nNum1, nNum2, nCD);
  }
  
 }
  • 1.04Kbytes
0
로그인 후 추천 또는 비추천하실 수 있습니다.
profile_image
포인트 100
경험치 23,917
[레벨 22] - 진행률 38%
가입일 :
2007-04-25 01:46:42 (6450일째)
…공포의 실체는 언제나 보잘 것 없다.

그러니, 전력을 다해 공포에 맞서라.

by 엘레나 아페르타, Still X Steel Paradice 2부, 멋진 신세계 中

댓글목록 4

CODEJIN님의 댓글

profile_image
이 상태라면 모든 약수가 출력될 수 밖에 없습니다.

while안에 최대공약수를 의미하는 변수를 따로 넣으시고 출력을 while밖에서 하셔야 할듯....

즉,



while( nCD < nNum1 && nCD < nNum2 )

{

  ++nCD;

  nTemp1 = nNum1%nCD;

  nTemp2 = nNum2%nCD;

  if( nTemp1 == 0 && nTemp2 == 0 )

  {

  gCD=nCD

  } 

 }

printf("G.C.D of %d & %d is %d\n", nNum1, nNum2, gCD);



아마 이렇게 하면 되지 않을까 합니다....

그냥 C는 안쓴지 오래되서 맞는지 확실하지는 않지만..OTL

Suerte♡님의 댓글

profile_image
윗분 말씀대로 일단 while문 안에 printf가 들어가 있는지라, 모든 공약수가 표시되는 것 같군요.



일단 제 생각에도 윗분 코드대로 하면 제대로 출력될 것 같긴 합니다만..



(근데 IF문 안에 세미콜론이 빠지지 않았나요?)

CODEJIN님의 댓글의 댓글

아스트랄로피테쿠스님의 댓글

profile_image
방금 작성 끝나고 작동 확인 후에 제출했습니다. 감사합니다.
전체 57 건 - 3 페이지
제목
아스트랄로피테쿠스 3,560 0 2010.04.11
아스트랄로피테쿠스 3,803 0 2010.03.11
아스트랄로피테쿠스 3,596 0 2010.02.02
아스트랄로피테쿠스 3,647 0 2010.01.25
아스트랄로피테쿠스 7,295 0 2009.12.02
아스트랄로피테쿠스 5,013 0 2009.11.08
아스트랄로피테쿠스 5,816 0 2009.11.01
아스트랄로피테쿠스 3,718 0 2009.10.31
아스트랄로피테쿠스 3,735 0 2009.10.30
아스트랄로피테쿠스 4,462 0 2009.10.23
아스트랄로피테쿠스 3,321 0 2009.09.30
아스트랄로피테쿠스 3,281 0 2009.09.20
아스트랄로피테쿠스 3,201 0 2009.08.21
아스트랄로피테쿠스 2,970 0 2009.07.30
아스트랄로피테쿠스 3,001 0 2009.06.25