백준 1009 - 분산처리(C언어)

컴퓨터/문제풀이집

728x90
반응형

 

이미지: Freepik.com

 

 

1009번: 분산처리

입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트 케이스에 대해 정수 a와 b가 주어진다. (1 ≤ a < 100, 1 ≤ b < 1,000,000)

www.acmicpc.net

문제 파악 및 구현 준비

  • 총 3개의 입력
    • 첫번째 : 테스트 반복 횟수 
    • 두번째와 세번째 : 제곱의 값과 지수
      • 값의 범위 1~100
      • 지수의 범위 1~1,000,000
  • 필요 구현 리스트
    • 반복문을 통한 테스트 케이스 반복
    • 제곱의 구현 및 제곱계산
    • 계산된 제곱값을 가지고 결과값 출력
  • 주의 사항 및 예외
    • 제곱의 범위가 상당히 큼에 따른 변수 오버플로우 극복 방법
      • 제곱을 하면서 나머지 연산자를 활용
    • 마지막 자리가 0일때의 결과 계산 유의 
      • 10번째 컴퓨터일 때
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int testcase; 
	scanf("%d", &testcase); // 테스트 케이스 입력 
	for (int i = 0; i < testcase; i++) // 테스트 케이스에 따른 반복
	{
		int a, b;
		scanf("%d %d", &a, &b); // 데이터 수의 입력
		int task = a;
		for (int j = 1; j < b; j++) // 데이터 수의 제곱을 위한 반복문 구현
		{
			task = task * a %10;  // 많은 수의 반복문이면 int를 초과할수 있어 나머지 연산 사용
		}
		if (task % 10== 0) // 만약 10번째 컴퓨터일경우 
			printf("%d\n", 10);
		else //외 
			printf("%d\n", task % 10);
	}
}

후기

  • 처음시도에서 변수 오버플로우로 인한 계산 오류 확인 
    • 나머지 연산을 이용하여 오버플로우 방지
  • 두번째 시도에서 0일경우에 대한 예외 확인 
    • if문을 추가로 작성하여 처리
  • 위의 코드를 사용할때 task변수에는 지수가 1이면 나머지 연산을 하지 않음으로 지수가 1일때 예외 발생이 생김
    • 나머지 연산을 추가.
728x90
반응형

Commnet

G91개발일지

Gon91(지구일)

91년생 공학엔지니어의 개발일지

TODAY :

YESTER DAY :

TOTAL :