2016-06-21 18 views
-10

次のプログラムでは、ユーザがabの2つの整数を入力できます。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はテストケースの数です。
aおよびbは、2つの入力整数です。
lは、bに昇格されたaです。
sは、bに提起されたaの最後の桁です。

+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%の結果印刷:aの大きい値について

-5 
2

および/またはbl = pow(a, b);はtの1つであるオーバーフローを目撃します彼はあなたのコードに問題があります。

修正
はあなただけaの単位の数字を使用してfast exponentiationsが手動で各ステップでのmodを取って実行する必要があります。あるいは、異なる累乗(1、(a%10)、...)の桁のパターンを見つけて、パターンを使用して最後の桁を見つけることができます。

関連する問題