숫자를 입력받았을 때 특정 자릿수를 가져올 수 있는 방법에 대해 공유하겠습니다.
입력 받은 숫자 특정 자릿수만 가져오기
- 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++) : 코딩테스트 대비 (인프런)
'C C++ > C C++ 유용한 알고리즘 기법' 카테고리의 다른 글
[C/C++] 정수 자릿수 세기 (0) | 2022.07.16 |
---|---|
[C/C++] 소문자-대문자 변환, 대문자-소문자 변환 (0) | 2022.07.10 |
[C/C++] 최솟값 최댓값 찾기 (0) | 2022.07.09 |
C언어 char형과 char*형 차이, %s, %c의 차이 (0) | 2022.07.03 |
C언어 여러 좌표 입력받아 출력하기 (0) | 2022.06.24 |
댓글