Category (Click)
개발보드 덕질하기
🪱

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

2023 방통대 C 스터디 강의노트
한국방송통신대학교 컴퓨터과학과의 C언어 스터디에 사용한 자료입니다.
배움은 끝이 없기에 강의노트라 하더라도 오류가 있을 수 있으며, 이 점에 대해서는 둥글게 지적 부탁드립니다.
읽기 전 아래 내용을 숙지하여주시기 바랍니다.
강의 노트에서 중요한 부분은 이렇게 노란색 전구()로 강조합니다.
한국어로 번역했을 때 뜻이 명확하지 않은 일부 용어는 의미를 분명히 하기 위해 한국어로 뜻을 번역하지 않고 영어 원문을 그대로 사용하거나 말음을 한국어로 표기합니다.
강의 노트는 스터디 내용을 대체할 수 없으며 이해를 위한 자세한 내용은 스터디에서 언급합니다.
강의 노트는 Light 테마에서 보시는것을 권장합니다.
스터디는 Windows 11, Visual Studio IDE 환경에서 진행합니다.
mac인 경우 패러렐즈를 이용해 Windows 11 ARM을 설치하여 동일하게 진행할 수 있습니다.
모든 강의 노트의 저작권은 작성자 차완기에게 있으며 무단 복제를 금합니다.

#방통대 2023 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; }
C
복사
위 코드는 배열을 이용해 long long보다 더 큰 숫자를 계산하는 예시입니다. 메모리만 무한하다면 아주 큰 숫자를 계산할 수 있겠죠.
알고리즘과 관련된 내용이라 길게 설명하지는 않겠습니다.