指数的最后一位——答案错误



我正在尝试实现一个简单的程序,该程序接受基数和指数并输出指数结果的最后一位,但在线裁判说我的程序给出了错误的答案。会出什么问题呢?

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

#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/

这是错误的:

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

你应该取10的模来得到最后一位数

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

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

最新更新