您的位置:首页 > 其它

OJ,VJ人见人爱A^B

2020-07-02 22:10 78 查看

求A^B的最后三位数表示的整数。
说明:A^B的含义是“A的B次方”
Input
输入数据包含多个测试实例,每个实例占一行,由两个正整数A和B组成(1<=A,B<=10000),如果A=0, B=0,则表示输入数据的结束,不做处理。
Output
对于每个测试实例,请输出A^B的最后三位表示的整数,每个输出占一行。
Sample Input
2 3
12 6
6789 10000
0 0
Sample Output
8
984
1

#include<stdio.h>
#include<string.h>
#include<math.h>
int main()
{
long long  n, m, remainder, i;
long long a[300], b[200];
while(scanf("%lld%lld", &n, &m) != EOF)
{
if(n == 0 && m == 0)
break;

remainder = 1;
for(i = 0; i < m; i++)
remainder = (remainder * n)%1000;
printf("%lld\n", remainder);

}
return 0;
}

这个求A的B次方后3位数的题。由于数据可以出的很大,我一点办法也没有。
虽然数据很大,但在每次运算时使用的“工具数据”,即使用“某种公式”,这个“某种公式”公式的系数也很大。那么就可以减少运算量。
这也是考验学生们对算法的寻找和设计能力吧。
尤其是第一位博主的解析,道清了每次使用(余数*底数)%1000,取余的原理。求后3位就对1000取余。求后4为就对10000取余。
由乘法竖式原理,结果的后3位数总是由一系列加法运算得来的。经观察可得,每次用1000取余得到的后3位数并没有丢失掉我们需要使用的数据的性质。
以上代码参考一下两位博主:
https://blog.csdn.net/Hunter_Kevin/article/details/105425025?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-12.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-12.nonecase

https://blog.csdn.net/luomingjun12315/article/details/45390367?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-14.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-14.nonecase

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: