백준/브론즈
[백준] 브론즈3-수학-곱셈 C++ 2588번
taene_
2023. 8. 23. 10:04
문제
(세 자리 수) × (세 자리 수)는 다음과 같은 과정을 통하여 이루어진다.

(1)과 (2)위치에 들어갈 세 자리 자연수가 주어질 때 (3), (4), (5), (6)위치에 들어갈 값을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 (1)의 위치에 들어갈 세 자리 자연수가, 둘째 줄에 (2)의 위치에 들어갈 세자리 자연수가 주어진다.
출력
첫째 줄부터 넷째 줄까지 차례대로 (3), (4), (5), (6)에 들어갈 값을 출력한다.
예제 입력 1 복사
472
385
예제 출력 1 복사
2360
3776
1416
181720
처음 소스코드: 출력초과, 런타임 에러
#include <iostream>
using namespace std;
int main() {
int a,b; //a,b는 세자리 자연수
cin>>a>>b;
int c[3];
c[0]=b%10; //b의 일의 자리
c[1]=(b/10)%10; //b의 십의 자리
c[2]=b/100; //b의 백의 자리
c[3]=b; //b의 숫자
for(int i=0; i<4; i++){
cout<<a*c[i]<<"\n";
}
return 0;
}
최종 소스코드:
#include <iostream>
using namespace std;
int main() {
int a,b; //a,b는 세자리 자연수
cin>>a>>b;
int c[]={b%10, (b/10)%10, b/100, b};
// c[0]=b%10; //b의 일의 자리
// c[1]=(b/10)%10; //b의 십의 자리
// c[2]=b/100; //b의 백의 자리
// c[3]=b; //b의 숫자
for(int i=0; i<4; i++){
cout<<a*c[i]<<"\n";
}
return 0;
}
접근 방법: 'string의 int화'와 '자연수의 배열화'라는 키워드를 먼저 생각해냈고, b라는 자연수를 일의 자리, 십의 자리, 백의 자리를 추출해 배열화를 해서 for문에 넣어 출력하는 것을 생각했다.
오류 및 실수: 바보같이 int c[]; 배열안에는 배열의 길이가 들어가야 하는건 알고있었는데 마지막에 c[3]=b; 를 추가하다가 배열의 길이를 수정하지 않고 제출해서 런타임 에러가 떴고 후에 실수를 바로 찾지 못해서 조금 헤맸다;;ㅋㅋ
다른 방법:
1. 처음 생각했던 키워드인 string의 int를 이용한 방법이다. 문자열 인덱스를 참조한 뒤 -'0'를 하면 숫자 값을 그대로 사용할 수 있다.
#include <iostream>
#include <string>
using namespace std;
int main() {
int a;
string b;
cin >> a;
cin >> b;
cout << a * (b[2] - '0') << "\n";
cout << a * (b[1] - '0') << "\n";
cout << a * (b[0] - '0') << "\n";
cout << a * stoi(b) << "\n";
return 0;
}
2. stdlib.h의 atoi()함수를 이용한 방법이다.
#include <stdio.h>
#include <stdlib.h>
int main() {
int a;
char b[4];
scanf("%d", &a);
scanf("%s", b);
printf("%d\n", a * (b[2] - '0'));
printf("%d\n", a * (b[1] - '0'));
printf("%d\n", a * (b[0] - '0'));
printf("%d\n", a * atoi(b));
return 0;
}
stoi = string to int
stof = string to float
stol = string to long
stod = string to double