티스토리 뷰

 

int 는 4byte 크기

4byte 는  4 x 8bit = 32bit

즉, 2^32 = 2의 32제곱 만큼의 크기 표현 가능

 2^32 = 2^(10*10*10*4) = 1024*1024*1024*4 = 4,294,967,296 만큼 표현가능

절반은 양수, 절반은 음수를 가르키므로 

양수의 최대값은 2,147,483,647 으로 10자리를 넘는 값을 표현 할 수 없다.

자료형 중  가장 큰 값을 표현 가능한 8byte 크기의 unsigned long long 인 ull 은 18,446,744,073,709,551,615 까지 표현 가능하며 20자리를 넘는 값을 표현 할 수 없다.

 

덧셈을 한 결과 값이 위 자료형의 크기를 초과 하는 경우에도 해당 자료형으로 값을 저장하는 경우 해당 값을 표현 할 수 없다. 이러한 경우 원하는 자리수 크기의 int 행렬을 이용해서 연산을 수행하고 char형 배열로 string 형태의 자료형으로 숫자 값을 구 해야 한다.

 

유형 이름 바이트 기타 이름 값의 범위
int 4 signed –2,147,483,648 ~ 2,147,483,647
unsigned int 4 unsigned 0 ~ 4,294,967,295
__int8 1 char -128 ~ 127
unsigned __int8 1 unsigned char 0 ~ 255
__int16 2 short, short int, signed short int –32,768 ~ 32,767
unsigned __int16 2 unsigned short, unsigned short int 0 ~ 65,535
__int32 4 signed, signed int, int –2,147,483,648 ~ 2,147,483,647
unsigned __int32 4 unsigned, unsigned int 0 ~ 4,294,967,295
__int64 8 long long, signed long long –9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
unsigned __int64 8 unsigned long long 0 ~ 18,446,744,073,709,551,615
bool 1 없음 false 또는 true
char 1 없음 기본적으로-128 ~ 127

을 사용 하 여 컴파일한 경우 0에서 255 /J
signed char 1 없음 -128 ~ 127
unsigned char 1 없음 0 ~ 255
short 2 short int, signed short int –32,768 ~ 32,767
unsigned short 2 unsigned short int 0 ~ 65,535
long 4 long int, signed long int –2,147,483,648 ~ 2,147,483,647
unsigned long 4 unsigned long int 0 ~ 4,294,967,295
long long 8 없음 (그러나와 동일 __int64 ) –9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
unsigned long long 8 없음 (그러나와 동일 unsigned __int64 ) 0 ~ 18,446,744,073,709,551,615
enum 다름 없음  
float 4 없음 3.4E+/-38(7개의 자릿수)
double 8 없음 1.7E+/-308(15개의 자릿수)
long double 와 동일 합니다. double 없음 와 동일 합니다. double

 

 

void sumArr(int L[], int R[], int sum[]){
	int loopIndex, supp = 0;
	for(loopIndex = 0;loopIndex<SIZE;loopIndex++) {
		sum[loopIndex] = L[loopIndex] + R[loopIndex] + supp;

		if (sum[loopIndex] > 9) {
			sum[loopIndex] -= 10;
			supp = 1;
		}
		else{
			supp = 0;
		}
	}
}

 

위 함수의 원리는 아래 그림과 같다.

이때 자릿수는 거꾸로 집어 넣는편이 좋다. 단순히 거꾸로 출력시키면 우리가 큰 자릿수부터 써내려가는 것처럼 출력을 할 수 있으므로 이 방법을 선택하였다. 즉 각 배열은 숫자의 자릿수들을 포함하고 있으니 하나의 숫자를 의미한다고 보면 된다. 세 번째 매개변수는 두 수의 합인데 이는 다른 방법을 사용해도 좋다.

 

자릿수를 거꾸로 배열에 입력한 덕분에 for문에서 인덱스를 0부터 시작하면서 계산하여 합배열에 낮은 자릿수부터 저장할 수 있게 되었다.

 

중요한 것은 각 자릿수를 더할 때 합이 10을 넘지 않는다면 좋겠지만, 넘는 경우의 처리다.

분기문에 따라 10을 초과한다면 자릿수의 합에서 10을 빼고 supp는 1이 된다. 즉 다음 자릿수에 1을 더하는 것이다. 그렇지 않는다면 불필요한 자릿수 덧셈을 방지하기 위해 supp는 0으로 다시 지정해주고 계속 루프를 돈다. 이 supp는 다음 자릿수에서 두 수의 각 자릿수에 더해진다.

 

그리고 int <-> char 사이에 숫자 변환 진행시에는 한자리수 씩 아래와 같은 방법을 사용한다.

char c = '5';
int n = c - '0';

///////////////////

int n = 5;
char c = n + '0';

 

 

댓글

파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음



Total
Today
Yesterday
최근에 달린 댓글