No Rules Rules

소음 (feat. 백준, 2935번) 본문

생활/코테

소음 (feat. 백준, 2935번)

개발하는 완두콩 2023. 4. 14. 12:36
728x90
반응형

소음
https://www.acmicpc.net/problem/2935

 

2935번: 소음

수업 시간에 떠드는 두 학생이 있다. 두 학생은 수업에 집중하는 대신에 글로벌 경제 위기에 대해서 토론하고 있었다. 토론이 점점 과열되면서 두 학생은 목소리를 높였고, 결국 선생님은 크게

www.acmicpc.net

 

// woohyeon.kim
// kim519620.tistory.com
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
string multiply(string num1, string num2){
    int n = num1.size();
    int m = num2.size();
    string ans(n + m, '0');
    for(auto i = n - 1; i>=0; --i)
        for(auto j = m - 1; j >= 0; --j){
            auto p = (num1[i] - '0') * (num2[j] - '0') + (ans[i + j + 1] - '0');
            ans[i + j + 1] = p % 10 + '0';
            ans[i + j] += p / 10;
        }
    for(auto i = 0; i < m + n; ++i)
        if(ans[i] !='0')
            return ans.substr(i);
    return "0";
}
string add(string num1, string num2) {
    string ans = "";
    int carry =0; 
    int i = num1.size() - 1;
    int j = num2.size() - 1; 
    while(i >= 0 || j >= 0 || carry){
        int sum=0;
        if(i >= 0)
            sum += (int)num1[i]-'0';
        if(j >= 0)
            sum += (int)num2[j]-'0';
        sum += carry;
        carry = sum/10;
        --i, --j;
        ans.push_back((char)sum % 10 +'0'); 
    }
    reverse(ans.begin(), ans.end());
    return ans; 
}

int main() {
	ios::sync_with_stdio(false), cin.tie(NULL);
    string A, B;
    char regi;
    cin >> A >> regi >> B;
    if(regi == '+')
        cout << add(A, B);
    else
        cout << multiply(A, B);
	return 0;
}
// *&)*@*

 

반응형

크기가 큰 두 수를 더하거나 곱하는 방법에 대한 문제입니다.

c++은 자료형이 담을 수 있는 한계가 있으므로 string을 통한 두 수의 합과 곱의 방법을 레퍼런스로 가지고 있으면 좋을 것 같습니다.

728x90
반응형
Comments