반응형

프로그래밍/알고리즘 24

C언어 소수 정수의 반올림

C언어의 예를들자 C언어의 자리수관련 알고리즘이 몇가지있다. floor(double a) 함수는 소수자리수를 잘라버린다. 수학의 가우스함수도 소수자리를 자른다. ceil(double a) 함수는 소수자리수를 무조건 올려버린다. 그럼 반올림은 어떻게 계산할까.. 생각해보자. 소수1자리 에서 반올림하려면 어떻게할까. 0.5를 원래의 수에 더한다음 floor 함수를 쓰면 어떻겠는가? 괜찮을 듯 싶다. 그럼 소수 두째짜리에서 반올림 해보자. 기본적으로 서식지정자는 반올림을 해준다. 괜히 머리아프게 하지말자... 그럼 수를 버리고싶다면 어떻게할까... 3.35인데 소수 둘째짜리를버리고 싶다.. 어떻게할까. 10을 곱하고 floor() 함수를 쓴수 다시 10으로 나눈다. 괜찮을듯 싶다. math 함수를 쓴다는게 좀..

C언어 에라스토테네스의 체 알고리즘

그리스의 수학자.천문학자.지리학자. 소수를 발견하는 방법으로서 에라스토테네스의 체(코스키콘)를 고안하고, 해시계로 지구 둘레의 길이를 처음으로 계산한사람. 지리상의 위치를 위도. 경도로 표시한 것은 그가 처음인것으로 알려져있다. -두산백과- 알로리즘을 짜다보면 소수, 약수,최대공약수 등등 익숙하지만 난감한 문제에 봉착할때가 많다. 수학파트에서 살펴본 공약수의판별을 위해 유클리드의 호제법을 알아야하는 것 처럼 말이다. 에라스토테네스의 체는 말그대로 체(고운가루는 통과 시킨다) 고운가루는 소수가아닌수이다. 알고리즘으로 살펴보자. 입력을 받은 수까지의 소수를 출력시켜준다. 배열을 생성하여 첨자찾으려는 수로 인식하고 배열의 값은 1로 초기화한다. 그리고 2의 배수부터 4,6,8,10.... 3의배수 6,9,12..

C언어 [Factorial]팩토리얼 알고리즘

팩토리얼을 C언어로 표현해보자. 0!=1이다. 이문제는 수학적 정의이다. 우리가 어떤수의 0제곱수는 1이라고 정의하는 것과 동일한 이치이다. 여기선 자세히 설명하지 않겠다. 우리가 지금 중요하게 다루는건수학적 정의보다는 어떤 식을 프로그램상으로 표현하는 방법에 대해서 공부하는 것이다. 힌트를 보려면 아래를 펼치면 된다. 먼저 원칙을 정하자 1.포맷을 맞추자 어떤 식을 표현하기위해선 여러변수들의 복합적인 작용이 있기때문에 틀을 정하지않고 생각하려면 한계에 다다른다. 그러므로 위 실행결과를 보고 그에 맞는 포맷(큰 틀)을 만들자 #include int main(void) { printf("%d! = %d", n, 결과); } 2. 위 실행결과에 맞는 틀을 갖춰졌다. 이젠 하나식 분석해보자. - 먼저 결과값을..

C언어 nCr 조합 알고리즘

위공식은 조합의 일반식을 점화식으로 나타낸 공식이다. 이 공식을 점화식으로 바꾼 것 뿐이다. 점화식이나 조합에대해서 잘 모른다면 그냥 맨처음 공식을 알고리즘으로 표현 하길 바란다. 우리는 간단히 조합을 나열하는 알고리즘을 만들 것이다. 결과 간단한 듯 보이지만, 몇가지 생각해볼 부분이있다. 우리는 그런 부분에 초점을 마추며 실력을 쌓아가자. 관련글 2012/12/06 - [프로그래밍/알고리즘] - C언어 알고리즘[Factorial]팩토리얼

반응형