본문 바로가기
코딩테스트/programming_C++

baekjoon #10757_큰 수 A+B_c++

by prometedor 2021. 10. 29.

 -> 제곱수는 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'을 해주어 원래의 숫자 값으로 변경하기 위함