标签:
acm训练中碰到的 题目 HDU 2035 ,1097
求 A^B 其实就是把B不断二分降次 得到 (A^2)^(B/2)
若B%2==1 则要特殊处理 即 A*(A^2)^(B/2)
下面给出 递归 和非递归代码
1 int power(int a,int b) 2 { 3 int res=1; 4 if(b==1) 5 return a%1000; 6 if(b%2==0) 7 res=res*power(a*a%1000,b/2)%1000; 8 else 9 res=res*a*power(a*a%1000,(b-1)/2)%1000; 10 return res; 11 }
非递归
1 int power(int a,int b) 2 { 3 int res=1; 4 a=a%10; 5 while(b>=1) 6 { 7 if(b%2==1) 8 res=res*a%10; 9 b=b/2; 10 a=(a*a)%10; 11 } 12 return res; 13 }
标签:
原文地址:http://www.cnblogs.com/threezj/p/4645717.html