思路一:这个题可以直接暴力做:
1 #include<iostream> 2 #include<cstdio> 3 int main() 4 { 5 int a,b; 6 while(scanf("%d%d",&a,&b),a,b) 7 { 8 int c=1; 9 for(int i=1;i<=b;i++) 10 { 11 c=(c*a)%1000; 12 } 13 printf("%d ",c); 14 } 15 return 0; 16 }
多少次方需要乘几次a直接上循环,边乘边模1000。
思路二:抱着学习快速幂的心理,用快速幂的思路做了一下。
快速幂的详细解法看这个:快速幂
快速幂的解法代码如下:
(本题比较特殊,需用int型定义才能AC,否则和答案不一样)
1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 int FastPower(int a,int b) 5 { 6 int ans=1; 7 while(b!=0) 8 { 9 if(b%2) 10 { 11 ans=ans*a%1000; 12 } 13 a=a*a%1000; 14 b/=2; 15 } 16 return ans; 17 } 18 int main() 19 { 20 int a,b; 21 while(scanf("%d%d",&a,&b),a,b) 22 { 23 int ans; 24 ans=FastPower(a,b); 25 cout<<ans%1000<<endl; 26 } 27 return 0; 28 }