티스토리 뷰
거듭 제곱 구하기
우리가 사용하는 C 혹은 C++, 비주얼 베이직 같은 프로그램 언어들은 각자 사용하는 자료형을 가지고 있고 자료형들은 일정한 크기를 갖는다. 따라서 이 자료형을 이용하여 큰 수 혹은 자료를 계산하는데는 한계가 있다. 이번 문제에서는 큰 수의 처리에 관한 학습을 하고자 한다.
문제 ( 난이도 ★★★☆☆ )
컴퓨터는 복잡한 계속을 빠르고 쉽게 해결해 준다. 그런데 숫자가 매우 커지면 문제가 발생한다. 예를 들어 여러분이 만약 프로그램에서 Visual C++을 사용한다면 int 형 변수는 10자리 이상을 표현하지 못한다. 다른 프로그램 언어도 마찬가지로 자료형마다 표현 할 수 있는 최대 크기가 정해져 있다.
그렇다면 10자리 이상 혹은 매우 긴 자리 이상의 계산은 어떻게 할 수 있을까. 예를 들어 큰 수의 사칙연산, 거듭 제곱 혹은 다른 기타 연산을 할 경우 다른 해결 방법을 찾아야 한다.
다음 예를 보자
24의 81 제곱은
6,267,734,313,577,584,256,357,641,581,093,817,726,955, 040,966,208,349,116,831,647,822,
507,211,168,810,373,395,608,151,952,729,507,634,763,502,977,024 라는 어마 어마한 숫자이다. 제곱하는 두 숫자가 주어지면 계산결과의 끝 3자리를 출력하는 프로그램을 작성하시오.
프로그램의 이름은 “square"로 한다.
입력 형식
입력 파일명은 "Input.txt"로 한다. 입력 파일의 첫째 줄에 두 숫자가 주어진다. 예를 들어
20 80이 주어지면 20의 80 제곱을 나타내는 것이다. 단 첫 번째 숫자는 10000이하의 두 번째 숫자는 100000000(1억) 이하의 숫자가 주어진다.
출력 형식
출력 파일명은 "Output.txt"로 한다. 출력 파일의 첫째 줄에 결과값의 끝 3자리를 출력한 다.
입력과 출력의 예 1
입력의 예
24
81
출력의 예
024
입력과 출력의 예 2
입력의 예
1054
24571
출력의 예
904
============================================================================================================================
여기서 우리가 주의할 점은
Int형 변수로는 절대 값을 구할 수 없다는 점과
트릭이 숨겨져 있다. 는 것이다.
곱셈의 원리를 이용하면 쉽게 풀 수 있는 문제.
하지만 나는 병맛짓을 했다는...
- Total
- Today
- Yesterday