백준/브론즈

[백준] 브론즈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