hwooo
BOJ (C/C++) 1629번: 곱셈 본문
https://www.acmicpc.net/problem/1629
1629번: 곱셈
첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 모두 2,147,483,647 이하의 자연수이다.
www.acmicpc.net

풀이
반복문을 이용한 계산은 시간초과가 발생해서, 알고리즘 설명대로 분할 정복을 이용한 거듭제곱으로 계산했다.이 과정에서 A는 int형의 범위가 넘어갈 수 있으므로 long long 으로 지정해줬다.(백준에서는 long long형 변수를 %d로 입력받아도 오류가 안 나는데 VS 환경에서는 발생함.)코드
#include <stdio.h>
int main() {
int B, C;
long long int A, sum = 1;
scanf("%lld %d %d", &A, &B, &C);
while (B) {
if (B & 1) sum = (sum* A) % C;
A = (A*A) % C;
B >>= 1;
}
printf("%lld", sum);
return 0;
}
'Study > Algorithm' 카테고리의 다른 글
| BOJ (C/C++) 2589번: 보물섬 (0) | 2022.12.09 |
|---|---|
| BOJ (C/C++) 1639번: 행운의 티켓 (0) | 2022.12.09 |
| BOJ (C/C++) 11723번: 집합 (0) | 2022.12.08 |
| BOJ (C/C++) 1197번: 최소 스패닝 트리 (0) | 2022.12.08 |
| BOJ (C/C++) 1976번: 여행 가자 (0) | 2022.12.08 |