본문 바로가기
C C++/C C++ 유용한 알고리즘 기법

[C/C++] 입력 받은 숫자 특정 자릿수 접근하기

by Go! Jake 2022. 7. 9.

숫자를 입력받았을 때 특정 자릿수를 가져올 수 있는 방법에 대해 공유하겠습니다.

입력 받은 숫자 특정 자릿수만 가져오기

- char arr[10] 등 문자열 배열을 선언한다.

- 입력된 숫자를 문자열로 받는다.

- 각 자릿수를 합쳐 숫자로 변환한다.

 

입력 받은 숫자 특정 자릿수만 가져오는 소스 코드를 보겠습니다.

#include <iostream>

int main() 
{
	char arr[4];
	int number;
    
    scanf("%s", arr);
    
	number = 10*(arr[0]-'0')+1*(arr[1]-'0');
	printf("%d",number);

	return 0;
}

for문을 통해 각 배열 요소에 숫자가 담았습니다. 1234인 경우 arr[0] ~ arr[3]까지 각 요소에 1,2,3,4가 담깁니다. 문자로 담깁니다. 이를 아래와 같이 정수로 바꿀 수 있습니다.

 

arr[0]-'0'을 통해 정수로 변경할 수 있다.

- char형 문자는 ascii값으로 구성되어 있다. 0이라는 문자는 ascii형이며 정수 48을 의미한다. 

- 따라서 문자열 9에서 - '0'으로 문자열끼리 연산하여 차이를 구하면 9라는 정수형 값을 구할 수 있다.

따라서 1234라는 입력이 있을 때 각 요소에 arr[0]-'0' 등으로 정수화하여 맨 앞 자리 1을 접근할 수 있습니다.

이 때 1234에서 12만 가져오고 싶다면? 아래와 같은 코드를 생각 해 볼 수 있습니다.

	number = 10*(arr[0]-'0')+1*(arr[1]-'0');

 

배울만한 추가적인 레토릭을 하나 추가하도록 하겠습니다.

'문자열로 입력받은 값 전체 정수화하는 법'입니다. 위에서 예를 들어 1234567 등등 입력값이 주어질 때 이를 어떻게 정수화 할 수 있을까요? 아래와 같이 할 수 있습니다.

#include <iostream>
#include <cstring>

int main() 
{
	char arr[100];
	int ans=0, cnt=0;
	scanf("%s", arr);
	for(int i=0; arr[i]!='\0'; i++)
	{
		ans=10*ans+(arr[i]-'0');
	}
	printf("%d",ans);		

	return 0;
}

두 가지 배울 점이 있습니다.

1) for (int i = 0; arr[i]!='\0'; i++)

이는 문자열 입력 마지막에 \0이 오기 때문에 그전까지 for문이 돌아가게끔 하는 조건이 됩니다.

2) ans=10*ans+(arr[i]-'0'); 이 경우 250이라는 입력이 있을 때,

첫 번째: ans=10*0+2=2

두 번째: ans=2*10+5=25

세번째: ans=25*10+0=250

로 하나씩 자릿수를 올라가게 하여 손쉽게 전체 문자열 입력을 정수로 변경할 수 있습니다.

 

Reference

it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비 (인프런)

 

 

댓글