HDOJ 2035 人见人爱A^B

汗,用了了HDOJ 1061一样的方法,居然老是WA。找不出错误,参考网上的,居然都是直接暴力的。当然,暴力还有个前提,还是和HDOJ 1061一样的思想,直接算后三位数就可以了,每次对1000求余。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// HDOJ 2035
// Author: Tanky Woo
#include <iostream>
#include <cmath>
using namespace std;
 
long A, B;
 
int main()
{
    while(scanf("%ld %ld", &A, &B) && A && B)
    {
        A %= 1000;
        int temp = 1;
        for(int i = 0; i < B; ++i)
        {
            temp *= A;
            temp %= 1000;
        }
        printf("%d\n", temp);
    }
    return 0;
 
}

下面是WA的。直接给main()函数部分了:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
int main()
{
    int model[100];
    int nCases;
    while( scanf("%ld %ld", &A, &B) && A && B )
    {
        int t = A % 1000;
        int i = 0;
        int temp = t * t % 1000;
        model[0] = t;
        model[++i] = temp;
        while(1)
        {
            temp *= t;
            temp %= 1000;
            if(temp == t || i >= B)
                break;
            model[++i] = temp;
        }
        ++i;
        int k = ((B % i -1)+i) % i;   // 最后的再+i并对i求与是为了防止N%i=0的情况,比如N=4
        printf("%d\n", model[k]);
 
 
    }
    return 0;
}

发布者

Tanky Woo

Tanky Woo,[个人主页:https://tankywoo.com] / [新博客:https://blog.tankywoo.com]

发表评论

电子邮件地址不会被公开。 必填项已用*标注