2013-04-08 3 views
0

我試圖實現一個簡單的程序,它需要基數和指數,並輸出指數運算結果的最後一位數,但是網上裁判說我的程序給出了錯誤的答案。什麼可能是錯的?C++:指數中的最後一位數字 - 錯誤的答案

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/

+0

您應該添加輸出錯誤答案的測試用例;否則你會有效地要求你去調試你的應用程序,而無需繼續。 – 2013-04-08 18:21:14

+0

我沒有任何,如果我有,我會自己調試它,但對於我給它的每個輸入給出正確的答案。事情是網上裁判抱怨,對不起 – 2013-04-08 18:22:25

+0

如果你還沒有做過,在每個角落的情況下,你可以考慮測試它。 – NPE 2013-04-08 18:23:54

回答

6

這是錯誤的:

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

你應該採取模數由10獲得最後的數字。

你確實在10以後執行模數,但不是在所有情況下(不是當for循環不需要任何迭代時)。所以在某些情況下,你的代碼會輸出一個不止一位的數字。

+0

謝謝,我想我真的沒有測試過所有情況下 – 2013-04-08 19:24:29

5

此代碼時失敗lastDigit * base溢出。

+0

@DavidSchwartz:我只是在讀完它後立即執行'base%= 10;'。這也消除了其他幾個'%10'表達式。 – 2013-04-08 18:32:22

+1

我想這不是問題,因爲基地範圍從1到20 – 2013-04-08 18:55:53