普通方法是逐个相乘,但是速度相当慢:
fun(long long x,long long n) {
for(int i = 0; i < n; i++) {
x *= x;
}
return x;
}
拿来说,可分为:2*2*2*2*2*2*2*2*2,由于2*2=4,进一步可以写成4*4*4*4*2,由此类推,可以写成8*8*2;
需要判断n为0时的特殊情况,代码如下:
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<cmath>
#include<algorithm>
#define Max 100001
using namespace std;
typedef long long ll;
ll pow(ll x, ll n) {
ll result = 1;
if(n == 0) return 1;
else {
while((n & 1) == 0) {
n >>= 1;
x *= x;
}
}
result = x;
n >>= 1;
while(n != 0) {
x *= x;
if((n & 1) != 0) {
result *= x;
}
n >>= 1;
}
return result;
}
int main() {
ll x, n;
cin >> x >> n;
cout << pow(x, n) << endl;
return 0;
}