Description
问题很简单,求x^n.请编写pow()函数.
声明如下:
int pow(int x,int n,int p)
//pow的功能是实现x^n,最后1个参数p没有用。
系统会自动在程序的最后加上如下代码:
int main()
{
int x,n;
scanf("%d %d",&x,&n);
printf("%d\n",pow(x,n,1));
return 0;
}
Input
x和n 0 < x,n < 2^31-1
Output
x^n .最后结果小于 2^31-1
话不多说,直接上代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cmath>
#include<stack>
#include<queue>
#define PI 3.1415926535
#include<functional>
#include<vector>
#include <iostream>
using namespace std;
typedef long long ll;
const int maxn=1e5;
const ll _INF = -8e18;
const int N = 1e5 + 10;
int pow(int x, int n,int p)
{
if(n == 1)
return x;
else if(n % 2 == 0)
return pow(x, n/2) * pow(x, n/2);
else
return x * pow(x,(n - 1)/2,1) * pow(x, (n - 1)/2,1);
}
另一种
#include<cstdio>
#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
#include<math.h>
#include<queue>
#include<stack>
#include<map>
#include<set>
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef long long LL;
const int Max=1e5+10;
char a[Max],b[Max],s2[Max];
int pow(int a, int n, int m)
{
int re = 1;
while(n)
{
if(n & 1)
re = (re * a);
n >>= 1;
a = (a * a);
}
return re;
}
快速幂:link.