runtime error: signed integer overflow: 859813556 * 4 cannot be represented in type ‘int‘

报错代码:

long long res;

res = pown(3,a-1) * 4 % 1000000007;

理论上pown返回的int值无论乘多少,取余1000000007后的结果都不会超过int范围。

但是这里报了一个859813556 * 4超出int表示范围的错误。个人猜测是因为运行时遇到int*int的情况,内部会开一个临时的int变量用于存放结果,然后再去取余再去赋值给res,所以这里res设置成long long也没用,因为是在pown(3,a-1) * 4这一步溢出的和其他无关。

解决办法:

res = pown(3,a-1);

res *= 4;

res %= 1000000007;

拆开分步运算,这样运算就都在res这个long long的空间中,不会溢出。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值