백준

백준 1009번 분산처리 - C언어(모듈러)

해보쟈 2024. 1. 23. 09:49

 

처음에는 그냥 숫자 입력받고 pow 쓴 후, 그 숫자의 마지막 숫자만 출력하면 되겠다고 생각했으나 숫자 범위가 너무 커서 오류가 생겼다. 그래서 마지막 숫자만 필요하다는 생각 + 구글링 해보니 우리에게는 모듈러가 있었다!!

 

< 모듈러 >

A mod B = R    ... Q(몫)

A : 피제수

B : 제수

R : 나머지  

Q : 몫

 

ex) 13 mod 5 = 3 

 

그러니 모듈러의 개념을 이용하여 수가 커지기 전에 계속 10씩 나눠주면 된다.

 

#include <stdio.h>
int main(void) {
	int T;

	scanf("%d", &T);


	for (int i = 0; i < T; i++) {
		int a, b;
		scanf("%d %d", &a, &b);    	//두 수 입력 받기
		int temp = a;
		for (int j = 1; j < b; j++) {
				temp = temp * a % 10;  //오버플로우 발생 방지 위해 나머지 연산 사용
			}
			if (temp % 10 == 0) {  //10일때 생각해서 케이스 나눔
				printf("%d\n", 10);
			}
			else
				printf("%d\n", temp % 10);
		}

	}

 

끝!