对于int和long long的疑惑(玄关)

P2671 [NOIP2015 普及组] 求和

$i \times a_i$ 会爆 int。
by Rosaya @ 2024-02-27 20:28:13


@[xuhrrr](/user/113001) 21 行的 `i*a[i]` 会爆 int
by amend @ 2024-02-27 20:29:12


简单来说就是有时候运算的数超出了`int`的范围,然后就会变成负数,`long long`可以存更大的数,所以这个时候可以用`long long`。
by weak_in_code @ 2024-02-27 20:36:37


@[amend](/user/780168) 可是我不太理解的是我的sum数组开的是long long类型为什么还会爆int呢?
by xuhrrr @ 2024-02-27 20:48:38


@[xuhrrr](/user/113001) ``sum[b[i]][i % 2][2] += i * a[i] % mod;`` 这句话中先计算 `i * a[i] % mod` 在加到 `sum` 里面,然后 `i * a[i]` 就会爆 int
by amend @ 2024-02-27 20:51:20


@[xuhrrr](/user/113001) 你 $i$ 和 $a_i$ 都是 int,乘起来还是 int,然后就溢出了,和 $sum$ 没有关系。
by xiaoshumiao @ 2024-02-27 20:51:26


你可以理解成 ```cpp auto tmp=i*a[i]; sum=tmp; ``` 即中间变量的类型是会自动推断的, `int*int` 还是 `int`,只是再赋值为了 `long long`
by Hagasei @ 2024-02-27 20:54:14


@[Hagasei](/user/383785) @[xiaoshumiao](/user/1008513) @[amend](/user/780168) 懂了懂了,谢谢大佬
by xuhrrr @ 2024-02-27 21:00:43


|