프로그래밍/C, C++

[C] 동아리 5주차 활동 (정수의 자리수 분리)

pxatd 2021. 4. 9. 00:29
728x90

문제

이번주차 우리 동아리의 연습문제이다. 보기에는 쉬워보이지만 막상 코딩하려하니 조금 시간이 걸렸던..(나만 그럴수도 ㅎㅎ) 초보개발자라 그런지 머리속에 있는 생각을 그대로 구현해내지를 못해서 답답하고 억울한(?) 시간이였다. 그래도 마지막에는 내가 생각했던대로 구현할 수 있어서 뿌듯한 문제기도 했다. 

학습

처음에 보고 꽤 재미있는 문제라고 생각했다. 우선적으로 들었던 생각은 세자리 수를 각각의 자릿수로 분리해서 배열에 저장한다음 곱셈의 원리에 따라 다시 더해주어서 마지막 합에 저장하면 어떨까 싶었다. 그러나 마음처럼 잘 되지 않았고 , 그 이유는 함수 div를 선언하여 배열 자체를 넘겨주고 싶었는데 그러면 포인터를 써야 한다는 생각에 지레 겁을 먹었기 때문이다. 그 다음 시도했던 방법은 그냥 정수를 자릿수로 나누어 화면에 찍어주는 방식이였다. (코드 1) 

이렇게 단순화 시켜 과제를 완료했지만 뭔가 허전해서 내가 원래 하려고 했던 방식도 한번 도전해보기로 했다. 우선 두 세자리 정수를 입력받고 div함수에서 각 자리수를 나누어 배열에 저장시킨다. 배열을 넘겨주는거라 포인터 개념이 사용되어 망설였지만 그냥 매개변수로 선언하고 넘겨주면 되더라..!!! 몇번 테스트 코드를 작성하면서도 이게 왜 되지..? 싶었다. ㅋㅋㅋ 포인터..! 별거 아니구만 ㅎㅎ

무튼 포인터로 넘겨준 다음 for반복문을 통해 문제의 (3) (4) (5)부분을 더해주고 찍어주면 완성 ! 코드1로도 과제를 완료한 것이기 때문에 넘어갈 수 있었지만 그래도 처음 생각했던 코드를 구현해냈다는 게 뿌듯하고 스스로 포인터를 활용해보았다는 점이 나를 행복하게 만들었다. (물론 코드1에 비해 코드2가 비효율적인 코드인건 인정한다 ;ㅁ;)

머리가 나쁘면 손이 고생한다.jpg

아! 그리고 pow의 원형을 찾아보다가 알게된 건데 double pow(double x,double y)라는 점! 무심코 int형을 썻다가 Error가 발생하길래 (int)로 강제 형변환 시켜주었다. 

코드 1

#include <stdio.h>

int main(){

	int a, b;
	scanf("%d %d", &a, &b);

	printf("%d\n", a * ((b % 100) % 10));
	printf("%d\n", a * ((b % 100) / 10));
	printf("%d\n", a * (b / 100));
	printf("%d\n", a * b);
return 0;
}

코드 2

#include <stdio.h>
#include <math.h>
#define SIZE 101
void div(int num, int*arr) {
    int max, i = 0;
    while (num != 0) {
        max = num % 10;
        arr[i] = max;
        num = num / 10;
        i++;
    }
}


int main(){
    int arrA[SIZE], arrB[SIZE];
    int a, b, sum1 = 0, sum1_ = 0, sum2 = 0, sum2_ = 0, sum3 = 0, sum3_ = 0;
	scanf("%d %d", &a, &b);

    div(a,arrA); //[0]=일의자리 [3]=백의자리
    div(b, arrB);
    
    for (int i = 0; i < 3; i++) {
        sum1 = arrA[i] * arrB[0];
        sum1_ = sum1_+(sum1 * (pow((int)10, (int)i)));
        
    }
    for (int i = 0; i < 3; i++) {
        sum2 = arrA[i] * arrB[1];
        sum2_ = sum2_ + (sum2 * (pow((int)10, (int)i)));

    }
    for (int i = 0; i < 3; i++) {
        sum3 = arrA[i] * arrB[2];
        sum3_ = sum3_ + (sum3 * (pow((int)10, (int)i)));

    }
    printf("%d\n", sum1_);
    printf("%d\n", sum2_ * 10);
    printf("%d\n", sum3_ * 100);

printf("%d", sum1_ + 10 * sum2_ + 100 * sum3_);

return 0;
}

728x90

'프로그래밍 > C, C++' 카테고리의 다른 글

[C] 백준 7568 덩치  (0) 2021.05.03
[C] 백준 1065 한수  (0) 2021.04.29
[C] 정수의 자리수 분리  (0) 2021.04.08
[C] 백준 4949 균형잡힌세상 ⚖  (0) 2021.04.08
[C] 백준 2798 블랙잭 🃏  (0) 2021.04.07