数学问题-二分求幂例题
例 4.10 人见人爱 A ^ B
题目描述
求 A^B 的最后三位数表示的整数。说明:A^B 的含义是“A 的 B 次方”
输入
输入数据包含多个测试实例,每个实例占一行,由两个正整数 A 和 B 组成 ( ),如果 A=0, B=0,则表示输入数据的结束,不做处理。
输出
对于每个测试实例,请输出 A^B 的最后三位表示的整数,每个输出占一行。
样例输入
2 3 12 6 6789 10000 0 0
样例输出
8 984 1
解题代码
#include<cstdio> int main() { int a, b; while (scanf("%d%d", &a, &b) != EOF) { if (a == 0 && b == 0)break; int ans = 1;//保存结果的最终变量,初始值为1 while (b != 0)//若b为0,即对b转换二进制过程结束 { if (b % 2 == 1)//当前二进制位为1,则需要累乘a的2^k次至变量ans { ans *= a; ans %= 1000;//求后三位数 } b /= 2;//b除以2 a *= a;//求下一位二进制位的权重,即从a的1次开始,依次求a的2次、4次...... a %= 1000;//求a的后三位 }//一边计算b的二进制值,一边计算a的2^k次,并将需要的部分累乘到ans上 printf("%d\n", ans); } return 0; }