PS

[C++] 백준 2407 : 조합

왕방토 2023. 3. 5. 21:22
728x90

https://www.acmicpc.net/problem/2407

 

2407번: 조합

n과 m이 주어진다. (5 ≤ n ≤ 100, 5 ≤ m ≤ 100, m ≤ n)

www.acmicpc.net

 

 

큰 수 다루는 문제를 한 번도 정리 안 한거 같아서..

 

아 그리고

문자열 뒤집는 함수인 reverse 가

<string> 에 있는 줄 알고 썼는데

<algorithm>에 있는 거더라

 

 

으음..

 

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

string pas[101][101];

string string_hap(string s1, string s2) {
	string ret = "";
	int tmp = 0;
	int s1_len = s1.length();
	int s2_len = s2.length();
	for (int i = 0; i < s1_len || i < s2_len; i++) {
		if (i < s1_len) {
			tmp += s1[s1_len - 1 - i] - '0';
		}
		if (i < s2_len) {
			tmp += s2[s2_len - 1 - i] - '0';
		}
		ret += (tmp % 10) + '0';
		tmp /= 10;
	}
	if (tmp != 0) ret += (tmp % 10) + '0';
	
	reverse(ret.begin(), ret.end());
	return ret;
}

int main() {
	int N, M;
	cin >> N >> M;

	for (int i = 0; i <= N; i++) {
		for (int j = 0; j <= i; j++) {
			if (i == 0) pas[i][j] = "1";
			else pas[i][j] = string_hap(pas[i - 1][j], pas[i - 1][j - 1]);
		}
	}

	cout << pas[N][M];
}