A, B = input().split()
A = A[::-1]
B = B[::-1]
LA = list(map(int, A))
LB = list(map(int, B))
gap = len(LA) - len(LB)
if (gap > 0):
while gap != 0:
LB.append(0)
gap -= 1
elif (gap < 0):
while gap != 0:
LA.append(0)
gap += 1
i = 0
answer = []
up = 0
while i < len(LA) or i < len(LB):
answer.append(up)
if LA[i] + LB[i] + up >= 10:
up = 1
else:
up = 0
answer[i] += (LA[i] + LB[i] - (up * 10))
i += 1
if (up == 1):
answer.append(1)
answer.reverse()
print(''.join(str(s) for s in answer))
해결 방법
- string을 뒤집어 0번째 index부터 계산하며 추가되는 숫자는 배열의 뒤에 붙여주자
- string을 일일히 int형변화를 계산할때마다 하지말고 map함수를 통해 먼저 각 index마다 적용시킨것을 list화하여 내장함수를 사용하도록 하자.
- 두수의 길이가 다를경우 추후에 더해줄 때 빈 메모리를 참조할 수 있으니 그 차이만큼 0으로 초기화를 해두자.
if LA[i] + LB[i] + answer[i] >= 10:
answer.append((LA[i] + LB[i] - 10))
answer.append(1)
else:
answer.append((LA[i] + LB[i]))
answer.append(0)
이런방식으로 중복되는 코드가 셍겼다. 이러한 부분을 해결하기 위해 올림을 관장하는 up이라는 변수를 두어 코드를 개선하였다.A, B = map(int, input().split())
print(A+B)
int는 2147483648까지 아니냐구...
역시 알고있던 지식이 가장 위험한것 같다..
무제한의 자릿수를 어떻게 제공하는가
파이썬의 int 자료형은 C 의 구조체 형태로 되어있으며 구조체에는 타입과 수를 저장할 수 있는 배열이 있다.
파이썬은 10진수를 2^30으로 쪼개어 배열에 순차적으로 저장한다.
즉, 32bit 운영체제에서 표현할 수 있는 정수의 최댓값인 2^30 −1을 벗어나지 않으며 저장할 수 있다.
2^30보다 큰 10진수라면 그 수를 쪼개어 배열에 추가 저장하면 된다.