티스토리 뷰

프로그래밍/알고리즘

거듭 제곱 구하기

터프 프로그래머 2011. 2. 25. 23:21

거듭 제곱 구하기


  우리가 사용하는 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형 변수로는 절대 값을 구할 수 없다는 점과

트릭이 숨겨져 있다. 는 것이다.


곱셈의 원리를 이용하면 쉽게 풀 수 있는 문제.


하지만 나는 병맛짓을 했다는...

'프로그래밍 > 알고리즘' 카테고리의 다른 글

떡 먹는 호랑이 - 다이나믹 프로그래밍  (0) 2011.02.25
가족 찾기  (0) 2011.02.25
해밀턴회로  (0) 2011.02.25
위상정렬  (0) 2011.02.25
데큐(Deque)  (0) 2011.02.25
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday