C++ 일기 - 2

이뱅갈·2023년 3월 7일
0

A * B


저번에 짯던 프로그램이 느리다... 통과를 못하는 중이다.
값 자체는 잘 나오는데 문제점이 무엇일까.

지금 생각한 문제점 : 수를 한번에 하나씩 접근하면서 저장한다.
string이 locality가 보장된다고는 해도 for문을 통해서 하나씩 접근해서 곱하기보다
1만단위로 수를 4개씩 가져와서 곱하는 경우 9999 * 9999 < INT_MAX임으로 좋지 않을까? 라는 발상을 하게 되었다.

근데 0000 * 0000의 경우에는 어떻게 정해야하지??
10000 * 10000의 경우에는 첫 iter에서 0을 저장할 것이고, 두번째 iter에서는 1 * 1을 저장할 것이다.
두번째 iter의 digit_index는 8이고.. 값은 1이 될 것이다. 이 경우 100000000이 된다.

평범한 22341 * 54313 곱하기의 경우에는 첫 iter에서 2341 * 4313이 발생하고 10096733이 된다.
두번째 iter에서는 5 * 2341이, 3번째 iter에서는 2 * 4313, 네번째 iter에서는 2 * 5가 나온다.
그렇다면 (10 * 10^8) + (5 * 2341 * 10^4) + (2 * 4313 * 10^4) + 10096733 = 22341 * 54313.
1개의 digit_index를 10^4로 생각하고, 올림을 해줄때도 10000으로 나눈 나머지를 윗 digit_index에 더해주면 될 것이다.

작성했더니 통과... 근데 10^5000승의 곱하기는 아직도 통과를 못했다.
아예 complexity자체를 줄이는 방법으로 접근해야하나?

profile
Overdose

0개의 댓글