C ++:指数中的最后一位数 - 错误的答案

时间:2013-04-08 18:19:29

标签: c++ algorithm

我正在尝试实现一个简单的程序,它接受基数和指数并输出取幂结果的最后一位数,但在线判断说我的程序给出了错误的答案。可能有什么不对?

P.S。程序的约束必须是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/

2 个答案:

答案 0 :(得分:6)

这是错误的:

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

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

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

答案 1 :(得分:5)

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