728x90
반응형
문제
문자와 숫자가 섞여있는 문자열이 주어지면 그 중 숫자만 추출하여 그 순서대로 자연수를 만듭니다.
만들어진 자연수와 그 자연수의 약수 개수를 출력합니다.
만약 “t0e0a1c2her”에서 숫자만 추출하면 0, 0, 1, 2이고 이것을 자연수를 만들면 12가 됩니 다. 즉 첫 자리 0은 자연수화 할 때 무시합니다.
출력은 12를 출력하고, 다음 줄에 12의 약 수의 개수를 출력하면 됩니다.
추출하여 만들어지는 자연수는 100,000,000을 넘지 않습니다.
▣ 입력설명 첫 줄에 숫자가 섞인 문자열이 주어집니다. 문자열의 길이는 50을 넘지 않습니다.
▣ 출력설명 첫 줄에 자연수를 출력하고, 두 번째 줄에 약수의 개수를 출력합니다.
입력예제
g0en2Ts8eSoft
출력예제
28
6
풀이
#include <stdio.h>
using namespace std;
int main(){
//숫자만 추출 , 약수 개수 구하기
char a[100];
int res=0, cnt=0, i;
scanf("%s", &a);
// 문자열의 끝엔 항상 \0 이 들어가있다.
for(i=0; a[i]!='\0'; i++){
if(a[i]>=48 && a[i]<=57){ //0~9까지 숫자
res=res*10+(a[i]-48); // res: 단위맞추기위해 *10
}
}
printf("%d\n", res);
for(i=1 ; i<=res; i++){
if(res%i==0) cnt++;
}
printf("%d\n", cnt);
return 0;
}
먼저 문자열을 char배열로 담는다. 문자열 배열의 마지막은 항상 \0 이 들어가 있어서 \0 이전 배열의 개수만큼 문자열이 숫자인지 비교를 한다. 48~57까지의 char타입이 아스키코드로 바꾸면 0~9까지가 되니, 48을 빼준다.
일의자리, 십의자리, 백의 자리 등등 자리수를 맞추기 위해 결과값 res에 10을 곱한다. 결과값을 값의 크기만큼 for문으로 나누어 0이 떨어지면 약수가 되니 개수만큼 cnt 변수에 담으면 약수의 개수를 알 수 있다.
반응형
'IT_study > Coding test' 카테고리의 다른 글
[Coding test Basic with c++] 올바른 괄호 (0) | 2021.12.16 |
---|---|
[Coding test Basic with c++] 영어단어 복구 (0) | 2021.12.16 |
[Coding test Basic with c++] 나이 계산 (0) | 2021.12.16 |
[Coding test Basic with c++] 나이차이 계산 (0) | 2021.12.16 |
코테준비 : 코드 구현력 기르기 with C++ (1) - 난이도 최하 (0) | 2021.08.25 |