hdu2035 人见人爱A^B

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2035

其实直接每次取余数就能过的 第一遍就是用这种方法过的 这次算是用二分加速过的吧 就是每次都讲底数平方 指数除以2 要是偶数没问题 要是奇数就在将多余的那部成到sum中(初始值为1)  不停地做循环知道b<=1 最后输出sum*a; 注意b开始不能取余数 否则会因为乘法的次数改变而出错

粘代码:

View Code
 1 #include<iostream>
2 using namespace std;
3 int ex_pow(int a,long long b)
4 {
5 long long sum;
6 a=a%1000;//a可以取余数 但b千万不要取余数 否则b较大时出错!!!因此WA了两次
7 sum=1;
8 while(b>1)
9 {
10 if(b%2==1)
11 { sum=(sum*a)%1000;
12
13 }
14 else
15 {
16
17 }
18 a=a*a%1000;
19 b=b/2;
20 }
21 return sum%1000*a%1000;
22 }
23 int main()
24 {
25 long long a,b;
26 while(cin>>a>>b)
27 {
28 if(a==0&&b==0)
29 break;
30 a=a%1000;
31 cout<<ex_pow(a,b)<<endl;
32 }
33 // system("pause");
34 return 0;
35 }


posted on 2011-10-30 14:00  渔家傲  阅读(318)  评论(0编辑  收藏  举报

导航