📄문제

문자와 숫자가 섞여있는 문자열이 주어지면 그중 숫자만 추출하여 그 순서대로 자연수를 만듭니다. 만들어진 자연수와 그 자연수의 약수 개수를 출력합니다.
만약 “t0e0a1c2her”에서 숫자만 추출하면 0, 0, 1, 2이고 이것을 자연수를 만들면 12가 됩니다. 즉 첫 자리 0은 자연수화 할 때 무시합니다. 출력은 12를 출력하고, 다음 줄에 12의 약수의 개수를 출력하면 됩니다.

 

ℹ️ 조건

추출하여 만들어지는 자연수는 100,000,000을 넘지 않습니다.

 

⬇️ 입력

첫 줄에 숫자가 섞인 문자열이 주어집니다. 문자열의 길이는 50을 넘지 않습니다.

g0en2Ts8eSoft

 

⬆️ 출력

첫 줄에 자연수를 출력하고, 두 번째 줄에 약수의 개수를 출력합니다.

28
6

 

📝 풀이

#include <iostream>

int main(int argc, const char* argv[]) {

    char str[50];
    scanf_s("%s", str, sizeof(str));

    int num = 0;

    for (int i = 0; str[i] != '\0'; ++i)
        if (str[i] >= '0' && str[i] <= '9')
            if(num != 0 || str[i] != '0')
                num = num * 10 + str[i] - '0';

    int primeCnt = 0;
    for (int i = 1; i <= num; ++i)
        if (num % i == 0)
            ++primeCnt;

    printf("%d\n%d", num, primeCnt);

    return 0;
}
  • 자연수는 앞 0만 무시하므로, 조건문으로 문자가 0이 아니거나, 현재 값이 0이 아니면 숫자를 가지고 옵니다.
  • 약수의 개수를 구하여 primeCnt를 1씩 증가시켜 총 약수의 개수를 구합니다.

'algorithms (C++)' 카테고리의 다른 글

[C++] 올바른 괄호  (0) 2023.10.13
[C++] 영어단어 복구 / scanf 공백 포함 입력받기  (0) 2023.10.13
[C++] 나이 구하기  (0) 2023.10.13
[C++] 진약수의 합  (0) 2023.09.27
[C++] 자연수의 합  (0) 2023.09.27
bonnate