큰수 덧셈을 위해 필요한 정보를 차근차근 알아보았습니다.
앞서 말하면 int 자료형은 4byte 입니다
1byte 는 8bit이므로 4*8 = 총 32bit입니다
그러므로 2의 32승 만큼 표현이 가능합니다.
2의 32승은 =4,294,967,296 만큼 표현이 가능하다는 얘기입니다
이중 절반은 음수 절반은 양수이기 때문에
-2,147,483,647 ~ 2,147,483,647 값까지 표현할수있습니다.
그러면 long long int 형은 어떨까요?
자료형 long long int 는 8byte의 크기로
2의 64승 만큼의 크기를 나타낼수있습니다,,
그렇다면 크기를 초과하는 숫자는 ?
문자열 로 연산 수행을 해주어야합니다.
1. 세로열을 통한 덧셈으로 10이상이 넘어가면 해당배열의 값에서 10을 빼고 다음이나 이전배열에 +1
2. 계산하려는 숫자의 배열 역순으로 출력.
역순으로 출력해야하는 이유는 덧셈의 경우 다음과 같습니다.
15678,3456 임의의 두수를 덧셈을 하겠습니다.
일반적인 덧셈은 이런방식으로하죠?
하지만 배열은
이런식으로 저장되어있어 원하는 식으로 덧셈을 수행해 줄수가없습니다.
그렇다면 역순으로 배열의 내용을 바꾸어 준다면 어떨까요?
결과값을 다시 역순으로 출력해주면
원하는 덧셈을 수행할수있겠죠?
한번 생각하고 그려본걸 코드로 구현해보겠습니다.
#include <string.h>// strlen 함수로 문자열 길이를 구하기 위해 가져왔습니다.
int main() {
char arr1[6] = {1,5,6,7,8}; // 문자열은 꼭 +1 마지막에/0 값이 있어요
char arr2[5] = {3,4,5,6}; // 마찬가지
int len1 = strlen(arr1); // 위 배열의 길이 5;
int len2 = strlen(arr2); // 위 배열의 길이 4
// 여기는 이제 역순으로 출력할거에요 알아야할게 5번까지의 배열을 0-4,1-3 이런식으로 바꾸어서 4,3,2,1,0번 으로 바꿀수 있게 해줄거에요
for (int i = 0; i < len1/2; i++) { // 가운데 조건을 1/2로 한 이유는 예를들어 len1이 5일경우 5/2는 2이므로 0부터 2까지 반복하죠?(아래로)
int tmp = arr1[i]; // 변수 tmp에 값을 저장해주지 않으면 바꿀수없습니다.
arr1[i] = arr1[len1 - i - 1]; // arr1[i] = arr1[len1 - i - 1] i가 0일때 arr1[0] = arr1[5-0-1] 즉 arr1[0]번값에 arr1[4]를 대입하라는 의미입니다.
arr1[len1 - i - 1] = tmp; // 그러면 여기는 arr1[4]에 위에 저장한 tmp=arr1[0] 값이니까 arr1[4]=arr1[0] 잘 바꿧씁니다.,,하하
}
//여기는 arr2의 역순 구하기
for (int i = 0; i < len2 / 2; i++) {
int tmp = arr2[i];
arr2[i] = arr2[len2 - i - 1];
arr2[len2 - i - 1] = tmp;
}
// 잘 되었는지 확인해볼게요
for (int i = 0; i < len1; i++) {
printf("%d ", arr1[i]);
}
printf("\n");
for (int i = 0; i < len2; i++) {
printf("%d ", arr2[i]);
}
}
대 만족
다음엔 실제로 덧셈하는걸로 넘어가서 해볼게요!
'C언어 > 매일 매일 안빼먹기' 카테고리의 다른 글
(C언어) 백준 2350: 인공지능 시계 / C 시간계산 (0) | 2023.08.02 |
---|---|
(C언어) 백준 1254: 모음 숫자 세기 / scanf( ),getchar( ) (0) | 2023.08.01 |
(C언어) 백준 10809: 알파벳 찾기 / 배열 비교 (0) | 2022.11.13 |
(C언어) 현재 시간 출력하기 (0) | 2022.11.12 |
(C언어) 배열 안에 여러 값들 비교하여 중복 값만 출력하기 (0) | 2022.11.10 |