2023 방통대 C 스터디 강의노트
한국방송통신대학교 컴퓨터과학과의 C언어 스터디에 사용한 자료입니다.
배움은 끝이 없기에 강의노트라 하더라도 오류가 있을 수 있으며, 이 점에 대해서는 둥글게 지적 부탁드립니다.
읽기 전 아래 내용을 숙지하여주시기 바랍니다.
•
강의 노트에서 중요한 부분은 이렇게 노란색 전구()로 강조합니다.
•
한국어로 번역했을 때 뜻이 명확하지 않은 일부 용어는 의미를 분명히 하기 위해 한국어로 뜻을 번역하지 않고 영어 원문을 그대로 사용하거나 말음을 한국어로 표기합니다.
•
강의 노트는 스터디 내용을 대체할 수 없으며 이해를 위한 자세한 내용은 스터디에서 언급합니다.
•
강의 노트는 Light 테마에서 보시는것을 권장합니다.
•
스터디는 Windows 11, Visual Studio IDE 환경에서 진행합니다.
◦
mac인 경우 패러렐즈를 이용해 Windows 11 ARM을 설치하여 동일하게 진행할 수 있습니다.
•
•
Email: admin@varofla.com
#방통대 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보다 더 큰 숫자를 계산하는 예시입니다. 메모리만 무한하다면 아주 큰 숫자를 계산할 수 있겠죠.
알고리즘과 관련된 내용이라 길게 설명하지는 않겠습니다.