@[yyh2024](/user/1295306)
这道题有几个细节:
>1. 如果 $x_1$ 和 $y_1$ 都为负,那么就会负负**得正**.
$x_2$ 和 $y_2$ 也有可能一正一负,**得负**.
>2. 某些时候 $x_1$ 和 $y_2$ 或 $x_2$ 和 $y_1$ 的乘积也可能极大或极小.
比如:
$x_1$ = 0 , $x_2$ =2147483647
$y_1$ = -2 , $y_2$ =1
则,
$x_1×y_1$ = 0
$x_2×y_2$ = 2147483647
这时,你的代码就会输出"int".
但是,
$x_2×y_1$ = -4294967294
因为 -4294967294 < -2147483647 ,
所以正确的输出应该是"long long int"
综上,只需将代码中 `if` 里的判断修改为:
```
x1*y1<-2147483648||x1*y1>2147483647||x2*y2>2147483647||x2*y2<-2147483648||x1*y2<-2147483648||x2*y1<-2147483647
```
即可得到一个 “ _unaccepted_ ” 的 " _100分_ "(第101个样例过不了)
但是,在这个思路上修改一下判断方法:
$x×y$ 为 `long long int` 类型,而 $int(x×y)$ 为 `int` 类型,
只要比较 $x×y$ 和 $int(x×y)$ 是否相等,即可知道有没有超出 `int` 值.
所以想要AC只用把 `if` 里的判断改为:
```cpp
x1*y1!=int(x1*y1)||x2*y2!=int(x2*y2)||x1*y2!=int(x1*y2)||x2*y1!=int(x2*y1)
``````
即可.
### 求互关!
by penghouqiao @ 2024-07-10 22:00:16
@[penghouqiao](/user/927730) 已互关
by yyh2024 @ 2024-07-11 18:34:58
@[penghouqiao](/user/927730) Thanks you.
by yyh2024 @ 2024-07-11 18:43:44
@[yyh2024](/user/1295306)
已回关
by penghouqiao @ 2024-07-11 18:46:57