PTA 7-243 快速幂
分数 10
作者 usx程序设计类课程组
单位 绍兴文理学院
输入两个整数a、b,求a^b 。结果保证在long long int范围内。
输入格式:
测试数据有多组,处理到文件尾。每组测试输入两个正整数a,b(1≤a,b≤62)。
输出格式:
对于每组测试,输出a^b 的结果。
输入样例:
2 4
输出样例:
16
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
#include <stdio.h>
long long int quick(long long x, long long y){
if(y == 0) //0的任何次方都得1
return 1;
long long sum = quick(x, y/2); //递归幂
if(y % 2 == 0){ //幂偶数
return sum * sum;
}else if(y % 2 == 1){ //幂奇数
return sum * sum * x;
}
}
int main(){
long long a, b;
while(~scanf("%lld %lld", &a, &b)){ //处理到文件尾
printf("%lld\n", quick(a, b));
}
return 0;
}
解题思路:
计算 a 的 b 次方,如果 b 是偶数(不为0),那么就先计算 a 的 b/2 次方,然后平方;如果 b 是奇数,那么就先计算 a 的 b-1 次方,再乘上 a ;递归出口是 a 的 0 次方为1。
归属知识点:
递归
条件选择