오늘 한 일
- 알고리즘을 학습하였다
- 블로그 TIL을 작성하였다
- 1일 1커밋을 하였다
느낀 점
백준에 있는 10757번 문제를 예전에 파이썬으로 풀 때는 큰 수 처리가 되어 있어서 쉽게 + 기본 연산자로 풀었는데 C언어에서 큰 수 처리가 안되어 있어서 실패한 기억이 있다 그래서 이번에 큰 수 처리하는 방법에 대해 알아보았다
배운 점
C언어 Long Long을 넘어가는 큰 수 계산
C언어로 Long Long을 넘어가는 큰 수를 계산하기 위해서는 그저 숫자형 타입으로 더 하는 것이 아닌
- 각 숫자를 문자열로 나타낸다
- 문자열의 각 자릿수를 순회하면서 덧셈한다
- 덧셈 시 발생하는 올림을 부분을 처리한다
위 과정을 거쳐서 해야하는데 그 과정을 코드로 나타내면 아래와 같다
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_SIZE 21
void addBigNumbers(const char *a, const char *b, char *result) {
int i, j, k;
int carry = 0;
int sum;
int lenA = strlen(a);
int lenB = strlen(b);
i = lenA - 1;
j = lenB - 1;
k = MAX_SIZE - 1;
result[k] = '\0';
while (i >= 0 || j >= 0 || carry > 0) {
sum = carry;
if (i >= 0) sum += a[i] - '0';
if (j >= 0) sum += b[j] - '0';
result[--k] = (sum % 10) + '0';
carry = sum / 10;
i--;
j--;
}
if (k > 0) {
memmove(result, result + k, MAX_SIZE - k);
}
}
int main() {
const char *num1 = "9223372036854775807";
const char *num2 = "9223372036854775808";
char result[MAX_SIZE];
addBigNumbers(num1, num2, result);
printf("%s + %s = %s\n", num1, num2, result);
return 0;
}
내일 계획
내일은 Flutter 공부를 해야겠다