/*
问题:快速求a的b次幂。
求A^B得最后3位数表示的整数。说明:A^B的含义是"A的B次方"
输入:输入数据包含多个测试用例,每个实例占一行,有两个正整数A和B组成(1<=A,B<=10000),如果A=0,B=0,则表示输入数据的结束,不做处理
输出:对于每个测试实例,请输出A^B的最后三位表示的整数,每个输出占一行。
输入:
2 3
12 6
6789 10000
0 0
输出:
8
984
1
思路:A^B的后三位数只和A的后三位数和B有关,中间结果保留3位,利用二分求幂求A^B
1 求后三位数用:n = n % 1000
2 要通过二分求幂结果为1表示该次的累乘结果需要保留
*/
#include <stdio.h>
int main(int argc,char* argv[])
{
int A,B;
while(EOF!=scanf("%d %d",&A,&B))
{
//正确性校验,如果A=0,B=0,这是不允许的
if(0==A && 0==B)
{
break;
}
int sum = 1;
//开始对指数进行二分求幂
while(B!=0)
{
//转换为二进制,如果为1,表明该数是需要累积的
if(B%2==1)
{
sum *= A;
//需要对计算后的数字保留后三位
sum %= 1000;
}
//不管是否转换为二进制,A的值一直在变
A *= A;
//对A计算后保留后3位数字
A %= 1000;
B /= 2;//B要不断除以2
}
printf("%d\n",sum);
}
getchar();
return 0;
}
机试算法讲解: 第28题 快来求a的b次幂
最新推荐文章于 2024-01-23 10:30:00 发布