-> 제곱수는 0의 개수를 의미함
숫자를 넣는 배열 정의할 때 크기를 10001로 지정해줘야함 ( 1개수 + 0개수 )
- string, 배열, vector 이용하여 문재 해결
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
using namespace std;
int num_A[10001], num_B[10001];
int main() {
vector<int> vec;
int sum;
string A, B, tmp;
cin >> A >> B;
if (A.length() < B.length()) { // A에 더 긴 수 저장
tmp = A;
A = B;
B = tmp;
}
for (int i = 0; i < A.length(); i++) { // 0번째 자리는 올림수가 있을 수 있으므로 비워둠
num_A[i + 1] = A[i] - '0'; // string 으로 정의된 수를 int로 변경
}
for (int i = 0; i < B.length(); i++) {
num_B[i + 1 + (A.length() - B.length())] = B[i] - '0';
}
for (int i = A.length(); i > 0; i--) { // A가 더 긴 수 -> i는 A.length()번 부터 시작해서 감소
sum = num_A[i] + num_B[i];
if (sum >= 10) {
num_A[i - 1]++;
sum -= 10;
}
vec.push_back(sum); // vec에 거꾸로 저장이 됨
}
if (num_A[0] != 0) {
cout << 1;
}
for (int i = vec.size() - 1; i >= 0; i--) {
cout << vec[i];
}
}
tmp => A 와 B를 입력 받아서 A가 B보다 긴 수가 아닐 경우 A 와 B를 바꿔주기 위해 도움을 주는 변수
A, B => 입력받을 수를 string 으로 정의 (A 와 B 중 더 긴수를 A에 저장하기로 함)
num_A[10001] => A 에서 각 자리의 숫자를 하나씩 순서대로 저장
num_B[10001] => B 에서 각 자리의 숫자를 하나씩 순서대로 저장
sum => A 와 B 의 각 자리수를 더하여 저장
vec => A 와 B 의 각 자리수를 더한 값을 하나씩 저장
전역변수로 고정된 값으로 배열선언만하고 value 지정 없을시 배열내의 모든 값은 0으로 초기화 함을 이용
=> num_B[i + 1 + (A.length() - B.length())] = B[i] - '0';
-> i + 1 + (A.length() - B.length())부터 시작하는 이유는 num_B[0]는 num_B[1] 값이 10 이상일 때 한 자리 수가 더 생기므로 비워두기 위함과 A길이가 B길이보다 크므로 B에는 A 길이 - B 길이 만큼 비워주기 위함임
-> B[i] - '0' 을 해주는 이유는 B를 int로 저장할 경우 아스키값이 저장되기 때문에 '0'을 해주어 원래의 숫자 값으로 변경하기 위함
'코딩테스트 > programming_C++' 카테고리의 다른 글
baekjoon #2839_설탕 배달_c++ (0) | 2021.10.28 |
---|---|
baekjoon #2775_부녀회장이 될테야_c++ (0) | 2021.10.28 |
baekjoon #10250_ACM 호텔_c++ (0) | 2021.10.28 |
baekjoon #2869_달팽이는 올라가고 싶다_c++ (0) | 2021.10.28 |
baekjoon #1193_분수찾기 (0) | 2021.10.27 |