[2023 방통대 C 스터디] 6. [배열 활용] 큰 수의 계산

앞선 [[배열] 문자열](https://www.notion.so/508c5a67aae74afd8204dcaf7432c5a1?pvs=21) 에서는 문자열을 표현하기 위해 배열을 활용하였는데요, 배열에 숫자가 들어가면 수열이 되겠죠. 이번에는 수열에 배열을 활용해보도록 하겠습니다.

가장 대표적인 예시로 큰 수의 계산이 있습니다.

c #include <stdio.h> #include <string.h>

void multiply(char num1[], char num2[]) { int len1 = strlen(num1); int len2 = strlen(num2); int result[len1 + len2]; // 두 수의 곱의 최대 자릿수는 len1 + len2 memset(result, 0, sizeof(result)); // result 배열 초기화

// 뒤에서부터 한 자리씩 곱셈을 수행합니다.
for (int i = len1 - 1; i >= 0; i--) {
    for (int j = len2 - 1; j >= 0; j--) {
        int digit1 = num1[i] - '0';  // 문자를 숫자로 변환
        int digit2 = num2[j] - '0';
        int product = digit1 * digit2;
        int pos1 = i + j;
        int pos2 = i + j + 1;
        int sum = product + result[pos2];

        result[pos1] += sum / 10;  // 자리 올림
        result[pos2] = sum % 10;
    }
}

// 결과 출력
int start = 0;
while (start < len1 + len2 && result[start] == 0) {
    start++;
}
if (start == len1 + len2) {
    printf("0");
} else {
    for (int i = start; i < len1 + len2; i++) {
        printf("%d", result[i]);
    }
}
printf("\n");

}

int main() { char num1[] = "123456789"; char num2[] = "987654321"; multiply(num1, num2); // 121932631137021795 return 0; }

위 코드는 배열을 이용해 long long보다 더 큰 숫자를 계산하는 예시입니다. 메모리만 무한하다면 아주 큰 숫자를 계산할 수 있겠죠.

알고리즘과 관련된 내용이라 길게 설명하지는 않겠습니다.