내가 푼 코드: 3. 0280000... -> 28로 자릿수를 구해 숫자로 만드는 것만 구현하지 못하였다.
#include <stdio.h>
using namespace std;
int main(){
freopen("input.txt","rt",stdin);
char array[50];
int numberArray[50] = {0, }; // 배열의 요소를 모두 0으로 초기
int digit, digitNumber, number = 0; // 수릿수, 각 자리수, 구하려는 수
int divisorNumber = 0;
// 1. 문자열을 입력한다.
scanf("%s", &array);
printf("%s\n", &array);
for(int i = 0; i < 50; i++){
printf("%d", numberArray[i]);
}
int k = 0;
// 2. 숫자만 추출하여 자연수로 수를 저장한다.
for(int i = 0; i < 50; i++){
if( array[i] >= 48 && array[i] <= 57){
numberArray[k] = array[i] - 48;
k++;
}
}
printf("\n");
for(int i = 0; i < 50; i++){
printf("%d", numberArray[i]);
}
printf("\n");
//
// 3. 배열을 자연수화한다.
// 몇 자리 수인지 알아야 한다.
for(int j = 0; j < 50; j++){
if( numberArray[j] > 0){
digit = j + 1; // digit 자릿수
}
}
printf("자릿수 : %d\n", digit);
// 자릿수를 10의 거듭제근으로 곱하여 수를 구하고 출력한다.
for(int j = 0; j < 50; j++){
digitNumber = numberArray[j] * (10^(digit-j-1));
number = number + digitNumber;
}
printf("자연수: %d\n", number);
// 4. 자연수의 약수의 개수를 출력한다.
for(int i = 1; i <= number; i++){
if( number % i == 0){
divisorNumber++;
}
}
printf("약수개수: %d\n", divisorNumber);
return 0;
}
나는 뻘짓을 한건가...
숫자만 추출하여 numberArray 배열에 넣었다.
0280000000.. 이 나오긴 하는데
자릿수를 어떻게 구해야할 지 모르겠다.
앞에 0이 아닌 수가 나온 지점부터 마지막 0이 아닌 수가 나오는 지점까지 자릿수를 구해야하는 데
35694000334 이런 수 처럼 중간에 0이 나오면 또 복잡해진다.
아래 결과출력을 보면 자릿수: 3 부터 잘못되었다. 이걸 해결하지 못했다..
아, 그리고
%s, %d 구분잘해서 쓰고
'48' 과 48 처럼 작은 따옴표 잘 구분해서 쓰자.
이런 기본적인 것들을 틀려서 계속 해맸다;;
해답
#include <stdio.h>
using namespace std;
int main(){
//freopen("input.txt","rt",stdin);
char array[50]; // 입력 받을 배열
int number = 0; // 구하려는 수
int divisorNumber = 0; // 약수의 개수
// 1. 문자열을 입력한다.
scanf("%s", &array);
// 2. 숫자만 추출하여 바로 자연화한다.
for(int i = 0; array[i] != '\0'; i++){
if( array[i] >= 48 && array[i] <= 57){
number = number*10 + (array[i]-48);
}
}
printf("%d\n", number);
// 4. 자연수의 약수의 개수를 출력한다.
for(int i = 1; i <= number; i++){
if( number % i == 0){
divisorNumber++;
}
}
printf("%d\n", divisorNumber);
return 0;
}
// 2. 숫자만 추출하여 바로 자연화한다.
for(int i = 0; array[i] != '\0'; i++){
if( array[i] >= 48 && array[i] <= 57){
number = number*10 + (array[i]-48);
}
}
새로 알게된 점 1
배열의 끝나는 지점에서 for문이 끝나도록
array[i] != '\0'
'\0'이 아닐 때 까지 실행하는 이 코드를 조건문에 넣자
새로 알게된 점 2
자릿수 찾고 1시간 남짓 삽질을 했는데 이렇게 바로 자연화 할 수 있다니..!!
number = number*10 + (array[i]-48);
0280000.. 을 자연수화 한다고 보면
number = 0
0 = 0 * 10 + (0)
2 = 0 * 10 + (2)
28 = 2 * 10 + (8)
...
이렇게 number = 28 이 된다.
인풋 설정
'Programming Language > C C++' 카테고리의 다른 글
[알고리즘 문제풀이] 8. 올바른 괄호 (0) | 2022.01.05 |
---|---|
[알고리즘 문제풀이] 7. 영어단어 복구★ (0) | 2022.01.05 |
[알고리즘 문제풀이] 5. 나이 계산★ (0) | 2022.01.03 |
[알고리즘 문제풀이] 4. 나이 차이★ (0) | 2022.01.03 |
[알고리즘 문제풀이] 3. 진약수의 합★ (0) | 2022.01.03 |