안경잡이 구루루

백준 2588 ( 곱셈 ) [ C programming ] (오답노트) 본문

C언어(C programming)/문제풀이(백준,BaekJoon)

백준 2588 ( 곱셈 ) [ C programming ] (오답노트)

구루루(gururu) 2020. 5. 13. 01:04
반응형

문제

(세 자리 수) × (세 자리 수)는 다음과 같은 과정을 통하여 이루어진다.

(1)과 (2)위치에 들어갈 세 자리 자연수가 주어질 때 (3), (4), (5), (6)위치에 들어갈 값을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 (1)의 위치에 들어갈 세 자리 자연수가, 둘째 줄에 (2)의 위치에 들어갈 세자리 자연수가 주어진다.

출력

첫째 줄부터 넷째 줄까지 차례대로 (3), (4), (5), (6)에 들어갈 값을 출력한다.

 


(오답)

#include <stdio.h>
int main(){
	int a, b[3];
	
	scanf("%d%d", &a, &b);
	
	int num1 = a * b[0];
	int num2 = a * b[1];
	int num3 = a * b[2];
	int sum = num1 + num2 * 1 +num3 * 100;
	
	printf("%d\n", num1);
	printf("%d\n", num2);
	printf("%d\n", num3);
	printf("%d", sum);

	return 0;
}

 

최근 배열을과 scanf 함수를 배워서 활용해보고자 했지만 틀렸다. 

나는 &b로 입력값을 받을 때  그 입력값을 b[0], b[1], b[2]로 나눠져서 들어간다고 생각하고 풀었지만 잘못된 생각이다.

b[0]에만 값이 들어가고 나머지는 값이 없어서 출력했을 때 이상한 결과가 나왔다.

이때 visul studio(비쥬얼 스튜디오) 는 오버플로우가 일어나는걸 방지하기 위해 scanf 사용을 못하게 했다.

 

나(정답):

#include <stdio.h>
int main() {
	int a, b,num1, num2, num3;
	
	scanf_s("%d", &a, sizeof(a));
	scanf_s("%d", &b, sizeof(b));
	
	num1 = b / 100;
	num2 = (b / 10) % 10;
	num3 = b % 10;

	printf("%d\n", a * num3);
	printf("%d\n", a * num2);
	printf("%d\n", a * num1);
	printf("%d", a * b);

	return 0;
}

완성된 코드는 위와 같다.

 

#include <stdio.h>
int main() {
	int a, b,num1, num2, num3;

우선 값을 받을 변수들의 자료형을 선언해 준다.

 

	scanf_s("%d", &a);
	scanf_s("%d", &b);

scanf 가 안되는 관계로 대신에 scanf_s를 사용한다

 

	num1 = b / 100;
	num2 = (b / 10) % 10;
	num3 = b % 10;

입력값으로 받은 b를 각 자리수에 따라서 나눈다

 

        printf("%d\n", a * num3);
	printf("%d\n", a * num2);
	printf("%d\n", a * num1);
	printf("%d", a * b);

	return 0;
}

이제 각 자리수에 맞춰서 a 와 곱하고 출력한다. 이때 최종곱은 a*b로 출력한다.


다른사람:

https://gabii.tistory.com/103

#include <stdio.h>
int main() {
    int inp1, inp2;
    int out1, out2, out3, res;
    scanf("%d %d", &inp1, &inp2);
    out1 = inp1 * ((inp2%100)%10);
    out2 = inp1 * ((inp2%100)/10);
    out3 = inp1 * (inp2/100);
    res = inp1 * inp2;
    printf("%d\n%d\n%d\n%d", out1, out2, out3, res);
}

완성된 코드는 위와 같다.

입력값을 받는 방식은 같아 생략

 

    out1 = inp1 * ((inp2%100)%10);
    out2 = inp1 * ((inp2%100)/10);
    out3 = inp1 * (inp2/100);
    res = inp1 * inp2;
    printf("%d\n%d\n%d\n%d", out1, out2, out3, res);
}

나처럼 자리수를 구한 후 변수에 집어넣지 않고  자리수를 계산하여 처음입력값과의 최종값을 변수에 넣었다.

출력할때 제어코드 \n 을 활용해서 한줄에 한번에 나타냈다.

반응형