Home 10월 7일 Today I Learned
Post
Cancel

10월 7일 Today I Learned

오늘 한 일

  • 알고리즘을 학습하였다
  • 블로그 TIL을 작성하였다
  • 1일 1커밋을 하였다

느낀 점

백준에 있는 10757번 문제를 예전에 파이썬으로 풀 때는 큰 수 처리가 되어 있어서 쉽게 + 기본 연산자로 풀었는데 C언어에서 큰 수 처리가 안되어 있어서 실패한 기억이 있다 그래서 이번에 큰 수 처리하는 방법에 대해 알아보았다

배운 점

C언어 Long Long을 넘어가는 큰 수 계산

C언어로 Long Long을 넘어가는 큰 수를 계산하기 위해서는 그저 숫자형 타입으로 더 하는 것이 아닌

  1. 각 숫자를 문자열로 나타낸다
  2. 문자열의 각 자릿수를 순회하면서 덧셈한다
  3. 덧셈 시 발생하는 올림을 부분을 처리한다

위 과정을 거쳐서 해야하는데 그 과정을 코드로 나타내면 아래와 같다

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 공부를 해야겠다

This post is licensed under CC BY 4.0 by the author.

10월 6일 Today I Learned

10월 8일 Today I Learned