0

我正在尝试实现一个简单的程序,该程序采用基数和指数并输出求幂结果的最后一位,但在线法官说我的程序给出了错误的答案。有什么问题?

PS 程序的约束必须是 700 kb,这在这里不是问题(我可以删除空格和注释并使用单字母变量来避免该问题)

#include <iostream>

using namespace std;

int main()
{
    int t; // t - number of test cases
    cin >> t;
    cin.get();
    for (int i = 0; i < t; ++i)
    {
        int base, exp; // base - base, exp - exponent
        cin >> base >> exp;
        cin.get();

        if (exp == 0)
            cout << 1 << endl;

        else if (base % 10 == 0)
            cout << 0 << endl;

        else if (base % 10 == 1)
            cout << 1 << endl;

        else if (base % 10 == 5)
            cout << 5 << endl;

        else if (base % 10 == 6)
            cout << 6 << endl;

        else if (base % 10 == 2 || base % 10 == 3 || base % 10 == 7 || base % 10 == 8)
        {
            int pattern = exp % 4; // pattern repeats every 4th exponent
            int lastDigit = base; // lastDigit - result of program

            if (pattern == 0)
                pattern = 4;

            for (int i = 1; i < pattern; ++i)
                lastDigit = (lastDigit * base) % 10;

            cout << lastDigit << endl;
        }


        else if (base % 10 == 4 || base % 10 == 9)
        {
            int pattern = exp % 2; // pattern repeats every 2nd exponent
            int lastDigit = base; // lastDigit 0 result of program

            if (pattern == 0)
                pattern = 2;

            for (int i = 1; i < pattern; ++i)
                lastDigit = (lastDigit * base) % 10;

            cout << lastDigit << endl;
        }
    }
}

这里是样品。

INPUT

3 10
6 2
7 3123123
0 1
1 0
0 0


OUTPUT

9
6
3
0
1
1

提前致谢。

编辑:

原始问题:http ://www.spoj.com/problems/LASTDIG/

4

2 回答 2

6

这是错误的:

int lastDigit = base; // lastDigit - result of program

您应该以 10 取模以获得最后一位数字。

您确实稍后会执行模数 10,但并非在所有情况下(当 for 循环不需要任何迭代时)。因此,在某些情况下,您的代码会输出一个多于一位的数字。

于 2013-04-08T19:21:04.723 回答
5

lastDigit * base此代码在溢出时失败。

于 2013-04-08T18:28:17.943 回答