0

基数と指数を取り、べき乗の結果の最後の桁を出力する簡単なプログラムを実装しようとしていますが、オンラインの裁判官は私のプログラムが間違った答えを出すと言います。何が間違っている可能性がありますか?

PS プログラムの制約は 700 kb である必要がありますが、これはここでは問題ではありません (スペースとコメントを削除し、1 文字の変数を使用してその問題を回避できます)

#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 ループが反復を必要としない場合ではありません)。そのため、場合によっては、コードが 1 桁を超える数値を出力することがあります。

于 2013-04-08T19:21:04.723 に答える
5

lastDigit * baseオーバーフローすると、このコードは失敗します。

于 2013-04-08T18:28:17.943 に答える