문제 링크
https://www.acmicpc.net/problem/33557
문제

A × B를 세로식 곱셈에서 받아올림을 하지 않고 바로 결과에 적는 잘못된 곱셈 결과가 일반 곱셈 결과와 같은지 판별해 보자. 만약 두 수의 자릿수가 달라 잘못된 곱셈에서 자릿수가 짧은 수의 자리가 비어 있는 경우, 자릿수가 긴 수의 숫자만을 결과에 기록한다.
입력
총 T개의 테스트 케이스가 입력으로 주어지며, 첫째 줄에 T가 주어진다. (1 ≤ T ≤ 1,000)
테스트 케이스의 첫째 줄에 정수 A와 B가 공백으로 구분되어 주어진다.
출력
각 테스트 케이스마다 한 줄에 잘못된 곱셈 결과가 일반 곱셈 결과와 같다면 1을, 같지 않다면 0을 출력한다.
예제 입력 1
5
1 16383
7 7
187 88
924 1376
526983 98387
예제 출력 1
1
1
1
1
1
알고리즘 분류
- 수학
- 구현
풀이
곱셈 결과가 32비트 정수형의 범위를 넘을 수 있음에 유의해야 한다.
코드
더보기
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#define FASTIO cin.tie(0); cout.tie(0); ios::sync_with_stdio(false);
using namespace std;
int T;
string A, B;
int Answer;
void settings() {
string Result = "";
reverse(A.begin(), A.end());
reverse(B.begin(), B.end());
int MinLen = min((int)A.length(), (int)B.length());
for (int i = 0; i < MinLen; i++) {
string Mul = to_string((A[i] - '0') * (B[i] - '0'));
Result = Mul + Result;
}
if ((int)A.length() > (int)B.length()) {
for (int i = MinLen; i < (int)A.length(); i++) {
string Mul = to_string(A[i] - '0');
Result = Mul + Result;
}
}
else if ((int)A.length() < (int)B.length()) {
for (int i = MinLen; i < (int)B.length(); i++) {
string Mul = to_string(B[i] - '0');
Result = Mul + Result;
}
}
reverse(A.begin(), A.end());
reverse(B.begin(), B.end());
if (stoll(Result) == stoll(A) * stoll(B)) {
Answer = 1;
}
else {
Answer = 0;
}
}
void printAnswer() {
cout << Answer << "\n";
}
void input() {
cin >> T;
while (T--) {
cin >> A >> B;
settings();
printAnswer();
};
}
int main() {
FASTIO
input();
return 0;
}
'BOJ > Silver' 카테고리의 다른 글
[BOJ/Silver 3] 백준 32284 오늘부터 우리는 (Me gustas tu)(C++) (2) | 2025.03.06 |
---|---|
[BOJ/Silver 5] 백준 24039 2021은 무엇이 특별할까?(C++) (2) | 2025.02.02 |
[BOJ/Silver 1] 백준 1342 행운의 문자열(C++) (2) | 2025.01.31 |
[BOJ/Silver 1] 백준 33254 Hurry the Hedgehog(C++) (2) | 2025.01.29 |
[BOJ/Silver 4] 백준 1835 카드(C++) (1) | 2025.01.07 |