类型溢出!
关那道oj1091,搞得些许心累,归根结底就是数据溢出的问题
这个是正确的代码
#include<stdio.h>
int main(void)
{
int n, A, B, s, i;
scanf("%d", &n);
while(n--)
{
s=1;
scanf("%d%d", &A, &B);
for(i=1;i<=B;i++)
{
s*=A;
s=s%1000;
}
printf("%d\n", s);
}
return 0;
}
循环且每次循环以后就取余,这样才不会数据溢出,还有关于pow函数的用法,pow函数的返回类型为浮点型,关于怎么转化:(我忘记了链接是怎么搞得了,截了张图放这里)
再来看看我的错误代码
#include<stdio.h>
#include<math.h>
int main()
{
int n,A,B,H;
double c;
scanf("%d",&n);
while(scanf("%d%d",&A,&B)!=EOF)
{
c=pow(A,B);
H=(int)c;
while(H>=1000)
{
H=H%1000;
}
printf("%d\n",H);
}
}
其实说白了,在算法上没有毛病,但是这个数据溢出的有点可怕,比如输入999的999次方,真的就炸了;
关于数据溢出,以后凡是再求阶乘或者求幂次方的时候,着重考虑数据溢出问题!!!!!