链接:Problem - 2035 (hdu.edu.cn)
题目大意:
求A的B次方的最后三位数表示的整数
解题思路:
1、暴力循环,可以在每一次取最后三位整数,防止数值过大,爆空间
2、运用递归进行快速幂运算
代码实现:
算法一、暴力循环
#include <iostream>
using namespace std;
int main(){
int m,n;
while(cin>>m>>n&&(m!=0||n!=0)){
int cnt,mul=1;//取结果
for(int i=0;i<n;i++){
mul*=m;
cnt=mul%1000;
mul=cnt;
}
cout<<cnt<<endl;
}
return 0;
}
算法二、快速幂运算
#include <iostream>
using namespace std;
long long quick_sort(long long base,long long power){
long long result =1;
while(power>0){
if(power%2==1) result=base*result%1000;
power=power/2;
base=base*base%1000;
}
return result;
}
int main(){
long long a,b;
while(cin>>a>>b&&(a!=0||b!=0))
cout<<quick_sort(a,b)<<endl;
return 0;
}
代码总结:
在幂为较大的数时,算法一的时间很长,而算法二的时间较算法一快了很多