题目大意
解题思路
如果直接计算A的B次方,A^B很容易爆破int,无法进行计算。因此这里我们运用算法的思路,B个A相乘结果取后三位等价于B个A的在相乘的过程中,前面的结果边取后三位,边乘A。
代码实现
1 #include<stdio.h>
2 int main(){
3 int n,m,s;
4 while(scanf("%d%d",&n,&m)!=EOF&&(n!=0||m!=0)) { //多组数据循环输入,以A=0,B=0结束
5 s=1;
6 while(m--) { //m个n相乘循环m次
7 s*=n;
8 if(s>=1000){
9 s%=1000; //每次都将前面的结果s取后三位保存,再与下一个n相乘,直至最后一个n乘完,得出结果
10 }
11 }
12 printf("%d\n",s);
13 }
14 return 0;
15 }
如何高效快速求大量幂运算呢? 快速幂运算!
一、快速幂运算的递归运算实现
1 #include<stdio.h>
2 int power(int a,int n){
3 int ans;
4 if(n==0){
5 ans=1;
6 } //在写递归时先写特殊情况,即结束条件
7 else{
8 ans=power(a*a,n/2); //递归调用,将幂运算的指数减半,缩减循环次数
9 if(n%2==1){
10 ans*=a;
11 } //指数为奇数时
12 }
13 return ans;
14 }
二、快速幂运算的非递归运算实现
1 int power(int a,int n){
2 int ans;
3 while(n){
4 if(n%2) {
5 ans*=a;
6 } //指数为奇数条件下
7 a=a*a; //指数为偶数条件下,底数平方变大
8 n/=2; //指数减半
9 }
10 return ans;
11 }
遇到的bug
本题的输入情况有所不同,以输入数据都为0时结束,因此一定要把while循环里的条件捋清楚
1 while(scanf("%d%d",&n,&m)!=EOF&&(n!=0||m!=0))