728x90
시간 제한 : 2초
메모리 제한 : 128MB
입력
첫째 줄에 두 수 S와 K가 주어진다. K는 20보다 작거나 같고, S는 100보다 작거나 같으며 K보다 크거나 같다.
출력
첫째 줄에 정답을 출력한다. 답은 9223372036854775807보다 작다.
소스코드
#include <iostream> using namespace std; int main(void) { long long s, k, sum = 1, tmp1, tmp2; cin >> s >> k; tmp1 = s / k; tmp2 = s - tmp1*k; for (int i = 1; i <= k - tmp2; i++) sum *= tmp1; for (int i = 1; i <= tmp2; i++) sum *= (tmp1 + 1); cout << sum; }
Tip
곱하는 수의 차이가 적으면 적을 수록 곱한 값이 커진다는 사실을 알고 있으면 문제를 풀 수 있다. int형을 초과할 수 있다는 사실을 알아두도록 하자. 일례로, s가 9, k가 3인 경우에는 1, 1, 7로 나누는 것보다 2, 2, 5가, 그리고 그보다 3, 3, 3이 각 수를 곱했을 때 더 크다.
728x90