본문 바로가기
4_ 고소한 알고리즘

C- ACM - 수 뒤집기

by 준환이형님_ 2010. 6. 12.

언뜻 배열을 생각 할 수도 있으나 10진수 쉬프트의 개념으로 접근한다면 깔끔하게 풀수 있다는 조언을 받았죠.
즉, 변수 하나를 만들어서 
1234  -> NULL
123   ->       4
12    ->      43
1     ->     432
이런식으로 원본(좌측)수는 나머지를 구한뒤 10씩 나누고 사본(우측) 은 원본의 나머지를 가져온뒤 10씩 곱해가는 과정입니다. 아 신기하당~ㅋㅋ

  
#include 

int swapnum(int num_temp)		//뒤집은 수를 만드는 함수
{
	int num_next=NULL;			// 1. 빈 변수를 하나 만든뒤

	while(num_temp>0)			// 2. 원본의 수가 한자리가 될때까지 반복
	{
		num_next*=10;			// 3. 사본에 10씩 곱해서 앞으로 채워 넣습니다
		num_next+=num_temp%10;	// 4. 원본의 끝자리를 사본에게 보냅니다
		num_temp/=10;			// 5. 원본을 10씩 나누어서 다음수가 오게 합니다
	}
	return num_next;			// 6. 뒤집힌 수 출력
}

int main(void)
{
	int repeat=NULL;	
	int num1, num2;
	num1=num2=NULL;

	scanf("%d", &repeat);	// 입력반복 횟수

                for(int i=0; i< repeat; i++)
               {
		scanf("%d", &num1);
		num2=swapnum(num1)+num1;	//원본과 뒤집힌 수를 더합니다

		if(swapnum(num2)==num2){printf("YES\n");}else printf("NO\n");	//두번째 원본과 뒤집힌수의 비교

		num1=num2=NULL;	// 다음 씬을 위한 초기화
	}
	return 0;
}

'4_ 고소한 알고리즘' 카테고리의 다른 글

C- ACM - 다운로드  (0) 2010.07.02
C- ACM - 지뢰찾기  (4) 2010.06.23
C- ACM - 소수판정  (0) 2010.06.09
C- ACM - 문자열  (0) 2010.06.08
C- ACM - Coin  (0) 2010.06.08