씹어먹는 C언어라는 교재로 공부하고 있습니다.(블로그에 어떤 분이 올리신 책) <div><br></div> <div><span style="color:#696559;font-family:'나눔고딕', nanumgothic, 'se_NanumGothic', 'AppleSDGothicNeo-Regular', sans-serif, simhei;font-size:16px;font-style:italic;font-weight:600;background-color:#f6f2e7;">2. 유클리드 호제법을 이용해서 N개의 수들의 최대공약수를 구하는 함수를 만들어보세요.</span> <div class="autosourcing-stub-extra" style="color:#696559;font-family:'나눔고딕', nanumgothic, 'se_NanumGothic', 'AppleSDGothicNeo-Regular', sans-serif, simhei;font-size:16px;font-style:italic;font-weight:600;background-color:#f6f2e7;"></div></div> <div><span style="color:#696559;font-family:'나눔고딕', nanumgothic, 'se_NanumGothic', 'AppleSDGothicNeo-Regular', sans-serif, simhei;font-size:16px;font-style:italic;font-weight:600;background-color:#f6f2e7;"><br></span></div> <div>이러한 문제 였습니다. 그래서 배열을 이용해서 코드를 짜서 최종적으로 다 만든 것 같습니다.</div> <div><br></div> <div>유클리드 호제법에 대해서 잠시 설명하자면 두 개의 최대공약수를 구할 때 이러한 방식으로 한다고 합니다.</div> <div>예를들어 32와 18 이것은</div> <div><br></div> <div>gcd(32,18) 로 쓰고, 유클리드호제법에 따라 한 번 연산을 하면</div> <div>gcd(18, 14) 가 됩니다.</div> <div><br></div> <div>즉 gcd(a, b) = gcd(b, a %b) 가 되고.</div> <div>b(오른쪽에 있는 수)가 0이 될 때까지 합니다. </div> <div>그래서 gcd(k, 0) 이라면 두 수의 최대공약수는 k가 되는 공식입니다.</div> <div><br></div> <div>여러개의 수를 이용해야하기 때문에 유클리드 호제법은 다음과 같은 식을 만족합니다.</div> <div>예를들어 5개의 경우</div> <div>gcd(a, b, c, d, e) =</div> <div>gcd((a, b), (c, d), e) =</div> <div>gcd(f, g, e) =</div> <div>gcd((f, g), e) =</div> <div>gcd(h, e) =</div> <div>gcd(i ,0) = i</div> <div><br></div> <div>이러한 방식으로 되게끔 코드를 짰습니다.</div> <div>gcd 한 번 실행한 값들은 새로운 배열로 보내서 저장을 해서 </div> <div>그 새로운 배열을 다시 gcd하는 방법을 이용했습니다.</div> <div><br></div> <div>제가 만든 코드와 결과물은 아래와 같습니다.</div> <div>(코드가 길어서 짤라서 붙였으니 보시는데 약간 불편함이 있습니다...)</div> <div><br></div> <div><br></div> <div><div style="text-align:left;"><img src="http://thimg.todayhumor.co.kr/upfile/201609/14747214000947c1cc23b141b6ba9feb5b40f43801__mn82294__w886__h613__f69650__Ym201609.png" alt="1.png" class="chimg_photo" style="border:none;width:640px;height:443px;" filesize="69650"></div> <div style="text-align:left;"><img src="http://thimg.todayhumor.co.kr/upfile/201609/14747214012b4bae95e4894f89a67ee7b1e73c3c9e__mn82294__w996__h538__f53237__Ym201609.png" alt="2.png" class="chimg_photo" style="border:none;width:640px;height:346px;" filesize="53237"></div> <div style="text-align:left;"><img src="http://thimg.todayhumor.co.kr/upfile/201609/1474721402cec8f370025e486286e04a1a166229c2__mn82294__w946__h410__f36677__Ym201609.png" alt="3.png" class="chimg_photo" style="border:none;width:640px;height:278px;" filesize="36677"></div> <div style="text-align:left;"><img src="http://thimg.todayhumor.co.kr/upfile/201609/14747214032d021d3658ed420bad7ffa472f494f48__mn82294__w974__h512__f28088__Ym201609.png" alt="4.PNG" class="chimg_photo" style="border:none;width:640px;height:337px;" filesize="28088"></div> <div style="text-align:left;"><br></div> <div style="text-align:left;">코드가 길어 보기가 어려울 수 도 있겠네요. 여튼 오랜시간동안 공부해서 저렇게 만들긴 했습니다. 다른 숫자에도 잘 작동하는 것 같습니다.</div> <div style="text-align:left;">여기서 질문은 제가 저렇게 만들기 전에 코드를 아래와 같이 썼었습니다.</div> <div style="text-align:left;"><br></div> <div style="text-align:left;"> <div style="text-align:left;"><img src="http://thimg.todayhumor.co.kr/upfile/201609/14747215191e8aa2904ede4d3e87b9d22f261d28fb__mn82294__w895__h503__f51343__Ym201609.png" width="800" height="450" alt="5.PNG" class="chimg_photo" style="border:none;" filesize="51343"></div><br></div> <div style="text-align:left;">코드 완성 전에, 저기 별표 해놓은 부분이 들어가 있었는데요. (완성된 코드에는 저 코드를 지웠습니다.)</div> <div style="text-align:left;"><br></div> <div style="text-align:left;">제 생각에는 euclidean 함수에 처음에</div> <div style="text-align:left;"><br></div> <div style="text-align:left;">if(put_number == 1) return gcd_number[0];</div> <div style="text-align:left;"><br></div> <div style="text-align:left;">이 코드가 있어서 함수가 종료되고 gcd_number[0] 값을 1로 보낼줄 알았는데</div> <div style="text-align:left;">위의 사진과 같이 결과값을 5로 보내고 있습니다.</div> <div style="text-align:left;"><br></div> <div style="text-align:left;">왜 이렇게 되는지 알고 싶네요.</div> <div style="text-align:left;"><br></div> <div style="text-align:left;">제 생각에는 <span style="font-size:9pt;">if(put_number == 1) return gcd_number[0]; 이게 끝나고 나서도</span></div> <div style="text-align:left;"><span style="font-size:9pt;">아래의 여러 명령문을 실행해서 이러한 결과가 나온것 같은데,</span></div> <div style="text-align:left;"><span style="font-size:9pt;">그렇게 한다고 가정을 해도 5가 나올 수 없다고 생각하는데 이상하네요..</span></div> <div style="text-align:left;"><span style="font-size:9pt;"><br></span></div> <div style="text-align:left;">그리고 맨 마지막에 <span style="font-size:9pt;">return gcd_number[0]; 이 코드가 있었을 때</span></div> <div style="text-align:left;">if(put_number == 1) return gcd_number[0]; 에다가 printf("%d", gcd_number[0])을 추가해서 결과값을 보니 1로 맞게 나왔는데</div> <div style="text-align:left;">결국에 출력되는 것은 5가 나오니 어떻게 되는지 모르겠습니다...</div> <div style="text-align:left;"><br></div></div> <div>마지막으로 현재 프로그래밍을 공부한지 이제 5개월이 되가고 있는데</div> <div>코드를 보고 조언을 해주실게 있다면 해주시면 감사하겠습니다!(__)</div>
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.