杭电2035——人见人爱A^B

题目大意
在这里插入图片描述
解题思路

如果直接计算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))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值