【OJ题集】m的n次方的最后三位数

OJ题在线网址:http://acm.hnust.cn/JudgeOnline/problem.php?id=1787

【问题描述】

 求m的n次方(12

【输入】

 有多组测试数据

每组测试数据一行,包含2个数据,即整数m和n,两个数用逗号隔开。 

【输出】

每行输出m的n次方的最后三位数。

【样例输入】

13,13
13,20

【样例输出】

253
801

【我的分析】

首先很容易百度得到这个算法,核心代码如下:

  for(i=0; i

但是问题在于如何改进算法,从而满足时间要求。

基本思路就是让for循环次数变小。

所有代码如下:

#include

int main()
{
    long long int i,x,y,last;    /*变量last保存求X的Y次方过程中的部分乘积的后三位*/
    // 输入
    while(scanf("%lld,%lld",&x,&y)==2)
    {
        last=1;
        x %= 1000;      // 因为一个三位数的n次方的最后三位数只和这个数的最后三位数有关
        y%=100;         // 因为可以发现这个是一个轮回,也就是说 (13,13)==(13,113)
        // 需要注意轮回的起始位置是13
        if(y<13){
            y+=100;
        }

        // 核心计算
        for(i=0; i

提交这个代码上去,就不会出现时间超限这个错误了。

经历了二十多次失败的我也总算成功了。

你可能感兴趣的:(我刷OJ题)