描述
假设m为奇数,则n^m=n^(m-1)*n --> ret=ret*n
你的任务是求N的M次方的结果。简单吧!
输入
输入有多组。每一组两个非负整数N(N<10000)和M(N<10000),中间一个空格,每一组数据占一行。输出
每组结果占一行。结果在long long范围之内哦!!约定,0的0次方等于1。样例输入
2 2样例输出
4
#include <iostream>
using namespace std;
__int64 power(__int64 n,__int64 m)
{
__int64 ret=1;
while(m){
if (m&1)
ret=ret*n;
n=n*n;
m=m>>1;
}
return ret;
}
int main(){
__int64 n,m;
while (scanf("%I64d%I64d",&n,&m)!=EOF){
printf("%I64d\n",power(n,m));
}
return 0;
}
假设m为奇数,则n^m=n^(m-1)*n --> ret=ret*n
那么n^(m-1)=(n^2)^((m-1)/2) ------> m=m>>1
n^2=n*n;