U E D R , A S I H C RSS

최대공약수/조현태

C++

느낀점

두번째 소스를 먼저 만들어서 그냥 그걸 첫번째에 붙여넣었다.
콜 바이 벨류라도 뭐 편한대로 하다보니..;;ㅁ;;
첫번째 소스의 변수명을 이쁘게 해주려다가 포인터가 들어가고 더 길어져 버렸다.
에잇~ 몰라몰라 훠이훠이 (귀차니즘의 압박..ㅎㅎ)

사용하려다 왠지 함수를 잘못 나눈듯한 느낌에 뒤늦게 수정..;;

소스

ver.1

~cpp 
#include <iostream>

using namespace std;

void main()
{
	int number_a, number_b;
	cout << "첫번째 숫자를 입력하세요:";
	cin >> number_a;
	cout << "두번째 숫자를 입력하세요:";
	cin >> number_b;
	cout << "\tx = " << number_a << "\ty = " << number_b << "\n";
	int *big_number, *small_number;
	if (number_a>number_b)
	{
		big_number=&number_a;
		small_number=&number_b;
	}
	else
	{
		big_number=&number_b;
		small_number=&number_a;
	}
	int temp;
	while (temp=*big_number%*small_number)
         {
		*big_number=*small_number;
		*small_number=temp;
         }
	cout << "\tGCD is " << *small_number << "\n";
}

ver.2

~cpp 
#include <iostream>

using namespace std;

void get_GCM(int big_number, int small_number)
{
	int temp;
	while (temp=big_number%small_number)
         {
		big_number=small_number;
		small_number=temp;
         }
	cout << small_number << "\n";
}

void main()
{
	int number_a, number_b;
	cout << "첫번째 숫자를 입력하세요:";
	cin >> number_a;
	cout << "두번째 숫자를 입력하세요:";
	cin >> number_b;
	cout << "The GCD of " << number_a << " and " << number_b << " is ";
	if (number_a>number_b)
		get_GCM(number_a, number_b);
	else
		get_GCM(number_b, number_a);

}

ver.3

~cpp 
#include <iostream>

using namespace std;

int Get_GCM(int , int );

void main()
{
	int number_a, number_b;
	cout << "첫번째 숫자를 입력하세요:";
	cin >> number_a;
	cout << "두번째 숫자를 입력하세요:";
	cin >> number_b;
	cout << "The GCD of " << number_a << " and " << number_b << " is "<< get_GCM(number_a,number_b) << "\n";
}

int Get_GCM(int number_a, int number_b)
{
	int temp;
	while (temp=number_a%number_b)
	{
		number_a=number_b;
		number_b=temp;
	}
	return number_b;
}

Erlang

느낀점



소스

  • pr_4.erl

-module(pr_4).
-export([getGCD/2]).
getSubGCD(NumA, NumB) when 0 == NumA rem NumB -> NumB;
getSubGCD(NumA, NumB) -> getSubGCD(NumB, NumA rem NumB).
getGCD(NumA, NumB) when NumA > NumB -> getSubGCD(NumA, NumB);
getGCD(NumA, NumB) -> getSubGCD(NumB, NumA).

  • shell

6> pr_4:getGCD(250, 100).
50


FeedBack

cout << small_number << "\n"; 이 아니라 cout << big_number << "\n"; 일듯 합니다.
실행은 안해봤지만,
small_number=temp; 를 볼 때 , 보나마나 temp 값이 출력될 듯. 하는데.
원리 설명좀.. while 구문이 이해가 안됨..^^ -- 아영

현태. 농활 잘 다녀왔어 ? 짜식~ 고 문자 받고 얼마나 놀랬는지 아니? ㅋㅋㅋ -아영

ㅎㅎ 역시 아영양..^^ 궁금점이 많군..ㅎㅎㅎ
일단 첫번째 질문에서는 small_number 가 맞습니다.^^
테스트 해봤는데, big_number하면 나누기 전의 값이 그대로 나와버리니.. 6과 9를 넣으면 6이 나오던가??ㅎㅎ

~cpp 
 	while (temp=big_number%small_number)
         {
		big_number=small_number;
		small_number=temp;
         }
이 부분이 했갈리는듯 한데..ㅎㅎ음.. 문제네.^^ 남이 봐서 어렵게 작성하다닛..
사실 저게

~cpp 
         temp=big_number%small_number;
 	while (0!=temp)
         {
		big_number=small_number;
		small_number=temp;
                  temp=big_number%small_number;
         }
와 같은 뜻이야.그런데 귀차나서 두개를 안쪽에 넣어버린거지.
while안에보면 ==이 아니라 =인거 보이지?ㅎㅎㅎ
아마 알고리즘이 다 같다보니 전체적인 흐름은 아영이꺼랑 같을꺼야..^^
그럼 나는 가게일 도우러..^^

아참.. 농활..즐거웠으.. 너두 한번쯤은 그런데 나와바.. 몸은 힘들었지만 말야..^^
ㅎㅎ 그리고 놀랐다면 미안..^^ 내가 나중에 밥사줄께 참아줘..ㅎㅎㅎㅎ 아영양의 그 '자기'님께 맞으면 난 죽음..ㅎㅎ - 조현태

= 가 == 인줄 아랏네 ㅋㅋ 이제 이해됐으 ~
temp = big_number%small_number;을 while()속에 넣으면 저런 영향을 끼치는지 이제 알았다네~
너무 몰라서 그런데 , 혹시 C에서도 써먹을 수 있는건가 ? -- 아영

너무 모르다니..그건 아니닷~~ 음.. 그런데 C에서도 써먹을수 있을껄? ㅎㅎ - 조현태


Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:31:16
Processing time 0.0237 sec