2020-10-31

类型溢出!

关那道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次方,真的就炸了;

关于数据溢出,以后凡是再求阶乘或者求幂次方的时候,着重考虑数据溢出问题!!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值