2016-06-21 21 views
-10

以下程序讓用戶輸入兩個整數ab,其中a爲基數,b爲電源,並打印a的最後一位數字,提升爲b。 SPOJ不接受我的以下代碼。我的下一個程序有什麼問題?

#include <stdio.h> 
#include <math.h> 

int main(void) 
{ 
    int t, a, b, l, s; 

    scanf("%d", &t); 

    while(t--) 
    { 
     scanf("%d%d", &a, &b); 

     l = pow(a, b); 

     s = l % 10; 

     printf("%d\n", s); 
    } 

    return 0; 
} 

t是測試用例的數量。
ab是兩個輸入整數。
la上調b
sa上調b的最後一位數字。

+0

我們喜歡錯誤消息,它們非常豐富。 – Havenard

+0

這段代碼缺少一些測試(如果t <0?),但是符合C代碼。沒有確切的錯誤信息,沒有人可以猜測你的問題是什麼。請閱讀(再次...)[幫助中心/問](http://stackoverflow.com/help/asking) –

+0

這裏是問題鏈接http://www.spoj.com/problems/LASTDIG/ –

回答

1

如果a爲負值且b很奇怪,那麼您將不必要地打印負號。

實施例:

a = -5 
b = 3 
pow(-5,3) == -125 

預期輸出:

5 

你的程序打印的(-125)10%的結果:

-5 
2

對於a大值和/或bl = pow(a, b);將見證溢出,這是t他的代碼存在問題。

修復
您應該只使用的a的單元位,並執行fast exponentiations手動取模在每個步驟。或者,您可以找到不同權力的數字模式(1,(a%10),...)並使用該模式查找最後一位數字。