7-7 快速幂运算 (10 分)
编程求x^y最后三位数表示的整数
输入格式:
输入在一行中给出两个整数x和y,其中1<=x,y<=1000000000
输出格式:
输出占一行,是x^y的最后三位表示的整数。
输入样例1:
在这里给出一组输入。例如:
2 3
输出样例1:
在这里给出相应的输出。例如:
8
输入样例2:
在这里给出一组输入。例如:
12 6
输出样例2:
在这里给出相应的输出。例如:
984
算法分析:题目的要求我们要读懂,当我们计算的数字是三位以内(包含三位)的话,就输出当前的数字,当结果超过三位,我们就输出该数字的后三位。由y的数据范围我们可以看出,需要计算很大的数,所以我们一般的数据范围是无法存储的,而且一般的计算方法也是超时的,所以我们需要使用分治法,因为幂运算可以分成两个相等的数相乘获得,再结合递归可以实现。数据的溢出,我们需要利用取余的手段,我们每次都对递归出的结果进行1000取余,一直都对后三位进行运算。
代码实现:
#include<bits/stdc++.h>
using namespace std;
int quickpow(int a, int b){
if(b == 1)
{
return a;
}
else
{
int c = quickpow(a, b / 2);
if(b % 2 == 0)
{
int m=c*c%1000;
return m;
}
else
{
int n=c*c*a%1000;
return n;
}
}
}
int main(){
int a=0,b=0;
cin>>a>>b;
int m=quickpow(a,b);
int c[3];
for(int i=2;i>=0;i--)
{
c[i]=m%10;
m /=10;
}
int sum=0;
sum +=c[0]*10*10+c[1]*10+c[2];
cout<<sum;
return 0;
}