
곱셈 과정과 결과를 출력하는 문제이다.
중요한것은 472는 고정이고 우리가 인덱스 뽑아와서 쓰는거는 385 뿐이다.
그래서 472는 맘편히 int로 받아도된다.
풀이 방법은 3가지가있다.
(1) C 스타일 -> char 배열 + stdlib.h 헤더의 atoi(배열)
(2) C++ 스타일 -> string 헤더의 string 클래스 + string 헤더의 stoi(string)
(3) 전부 int로 받아서 수학적으로 풀기
위의 3가지 방법으로 각각 풀어볼 것이다.

엄청 많이 틀렸다.
#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;
}
이게 정답 코드이다.
3자릿수를 받는다면
char b[3]이 아니라,char b[4]로 해야한다.
scanf 형식 지정자를 %s로해서 char[]로 받으면 제일 뒤에 '\0'이 자동으로 들어간다.
따라서 char b[3]을 하면 해당 char[]는 크기가 3이라 4개의 값을 받지못하니 오류가 발생한다.
b[2] - '0'을 이용해char를int로 형변환 할 수 있다.
char []안에는 char 자료형이 들어있다. 즉 b[2]는 char 타입이된다.
char 타입은 +,-,*,/,% 같은 각종 수학적인 연산자랑 쓰이면 문자로 인식되어 int 타입의 아스키 코드를 반환한다.
따라서 b[2] - '0' 을 하면 int - int로 int가 나오게된다.
(참고로 아스키코드에서 0~9까지 연속적인 아스키코드를 가지므로 이렇게하는 방식이 가능하다)
char 자료형은 어떻게 쓰이느냐 (printf, cout, 수학연산자등,,,)에 따라서 반환하는 값이 달라진다.
이 것에 대해서 잘알지못해서 어려웠다.
출력 형식을 제대로 보지않았다. 개행단위로 출력해야하는데 printf() 쓸 때 \n 붙이는 것을 깜빡했다.
배열을 int로 변환해주는 함수이다.
C 스타일, 즉 char[]를 string 처럼 써서 숫자값을 받을때 아주 유용하게 써먹을 수 있을 것 같다.
#include <iostream>
#include <string>
using namespace std;
int main() {
int a;
string b;
cin >> a >> 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;
}
string 클래스에 인덱스로 접근하면 char 타입으로 반환한다. -> string 타입이 아니라 stoi() 못씀
이걸 모르고 stoi(s[2]); 이런식으로했다가 틀렸다.
#include <iostream>
using namespace std;
int main() {
int a,b;
cin >> a >> b;
cout << a*(b%10) << '\n';
cout << a*(b/10%10) << '\n';
cout << a*(b/100) << '\n';
cout << a*b;
return 0;
}
전부 int로 받아서 수학적으로 b의 1의 자리, 10의 자리, 100의 자리 를 추출하는 풀이이다.
int자료형이 수학적 연산하기에 편하니까, 입력이 숫자인 경우int로 받아서 수학적으로 해결할 수 있는것은
수학적으로 해결하는 것이 좋은 것 같다.
/와%연산자를 잘 활용하는 것이 중요한 것 같다.

언제나 그렇듯이 C 스타일 코딩이 성능이 가장 좋다.
문자열 관련 공부를 더욱 열심히해야겠다.
개인적으로 생각하는 이 문제의 핵심은
(1) ASCII 코드를 활용한 문자열 <-> 숫자 자료형 변환
(2) <stdlib.h> 의 atoi(arr[]) 와 <string>의 stoi(s) 의 사용
이었던 것 같다.