2016-06-21 58 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),...)并使用该模式查找最后一位数字。