상세 컨텐츠

본문 제목

C 언어 예제, 대칭수 찾기. Project Euler 4번

컴퓨터 관련/C 언어 예제

by 열정과 함께 2016. 5. 20. 21:58

본문

3자리 수를 곱해서 만들 수 있는, 가장 큰 대칭수(pallindrome) 찾기이다.


그러니까 이를테면


1331, 14441. 1234321 이런 수를 3자리 수의 곱으로 만들어보라는 것이다.


음.... 다만 답은 여기에 올리지 않는다. 


뭐 여기 아니어도 찾고자 한다면 순식간에 찾을 수 있을 터이다만


때로는 모르고 푸는 것고 좋지 않을까?




아래는 프로그램의 소스이다.


간단하다. 그냥 숫자를 뽑아서 앞뒤 자리를 비교하는 함수를 만든 다음에 반복실행한다.


어떻게 보면 단순무식하기 짝이 없는 알고리즘이지만


컴퓨터가 대신 해주니 이런 무식한 알고리즘도 설 자리가 있다 ㅋㅋ


#include <stdio.h>

int pallindrome(int num3);

int main()

{

int i, num1=999, num2=999;

int candidate=100;

for(num1=999;num1>899;num1--)

{

for(num2=999;num2>899;num2--)

{

if(pallindrome(num1*num2)==0)

{

if(num1*num2>candidate)

{

candidate = num1*num2;

}

}

}

}

printf("The answer is, %d \n", candidate);

return 0;

}

int pallindrome(int num3)

{

int array[6];

int digit=0, i, num3_temp;

num3_temp = num3;

for(i=0;i<6;i++)

{

array[i]=num3_temp % 10;

if(num3_temp%10==num3_temp)

{

digit=i+1;

break;

}

else

{

num3_temp = num3_temp/10;

}

}

if(digit %2 ==0)

{

for(i=0;i<digit;i++)

{

if(array[i]==array[digit-1-i])

{

if(i==digit/2)

{

return 0;

}

}

else if(array[i] != array[digit-1-i])

{

return 1;

}

}

}

else

{

for(i=0;i<digit;i++)

{

if(array[i]==array[digit-1-i])

{

if(i==(digit-1)/2)

{

return 0;

}

}

else if(array[i] != array[digit-1-i])

{

return 1;

}

}

}

}





관련글 더보기

댓글 영역