백준 1629 "Multiply"
https://www.acmicpc.net/problem/1629
Get A^B
But the number could be too huge, so devide it by c and get the remainder.
so, get A^B%C
/////////////////////////////////////////////////////////////////////////////////////////////////////
We can solve it with Divide And Conquer.
Use long long type because the number can be a big number.
/* Wrong answer. It could happen overflow. */
#include <iostream>
#include <Windows.h>
using namespace std;
long long a, b, c;
long long calc(long long a, long long b, long long c)
{
 if (b == 0) { return 1; }
 else if (b == 1) { return a%c; }
 else if (b % 2 == 0) { return calc(a*a, b >> 1, c) % c; }
 else { return a * calc(a, b - 1, c) % c; }
}
int main() {
 cin >> a >> b >> c;
 cout << calc(a, b, c) << '\n';
 system("pause");
 return 0;
} 
/* Correct answer */
#include <iostream>
using namespace std;
long long a, b, c;
long long calc(long long a, long long b, long long c)
{
 if (b == 0) {return 1;}
 else if(b == 1) {return a%c;}
 else if (b % 2 == 0) {long long temp = calc(a, b/2, c); return (temp*temp)%c;}
 else {return a * calc(a, b-1, c) % c;}
}
int main() {
 cin >> a >> b>> c;
 cout << calc(a, b, c) << '\n';
 return 0;
}
//
Reference
C++(씨쁠쁠)(cplusplus)-백준(baekjoon)(BaekJoon)코딩 1629번:곱셈 답
http://codecollector.tistory.com/m/268
 
댓글 없음:
댓글 쓰기