zhangjinxuan 发表于 2022-11-27 09:50:57

C++中的 abs 函数会不会出问题?

有一次做题(https://www.luogu.com.cn/problem/P8869),用自带的 abs 错了,手写 abs 没有错,这是什么原因?

是自带的 abs 有什么问题吗?感谢解答{:10_303:}

yuxijian2020 发表于 2022-11-27 09:53:55

talk is cheap,show me the code
出错的代码呢

zhangjinxuan 发表于 2022-11-27 09:55:44

yuxijian2020 发表于 2022-11-27 09:53
talk is cheap,show me the code
出错的代码呢

here:
#include <bits/stdc++.h>

using namespace std;

int h, w;
int main() {
        scanf("%d%d", &h, &w);
        if (w > 0) printf("%d", abs(h));
        else printf("%d", -abs(h));
        return 0;
}

yuxijian2020 发表于 2022-11-27 09:58:50

printf("%d", -abs(h));
你以为数学公式呢?   能这么用负号?

zhangjinxuan 发表于 2022-11-27 09:59:38

yuxijian2020 发表于 2022-11-27 09:58
你以为数学公式呢?   能这么用负号?

难道?
printf("%d", -(abs(h)));
这样才是对的?

zhangjinxuan 发表于 2022-11-27 10:04:31

yuxijian2020 发表于 2022-11-27 09:58
你以为数学公式呢?   能这么用负号?

也不对啊?

yuxijian2020 发表于 2022-11-27 10:10:06

zhangjinxuan 发表于 2022-11-27 09:59
难道?

这样才是对的?

动手试试呢

zhangjinxuan 发表于 2022-11-27 10:12:20

yuxijian2020 发表于 2022-11-27 10:10
动手试试呢

试了的,有一个测试点错了,但是仍然不知道是哪里的问题

tommyyu 发表于 2022-11-27 10:24:05

我用 long long 就全部 AC 了,有些题目非常喜欢阴人,即使他说了数据在32为整数以内也不能信

zhangjinxuan 发表于 2022-11-27 10:27:11

tommyyu 发表于 2022-11-27 10:24
我用 long long 就全部 AC 了,有些题目非常喜欢阴人,即使他说了数据在32为整数以内也不能信

啊这,我试试?

zhangjinxuan 发表于 2022-11-27 10:32:22

tommyyu 发表于 2022-11-27 10:24
我用 long long 就全部 AC 了,有些题目非常喜欢阴人,即使他说了数据在32为整数以内也不能信

果然是真的{:10_282:}

dolly_yos2 发表于 2022-11-27 10:49:51

tommyyu 发表于 2022-11-27 10:24
我用 long long 就全部 AC 了,有些题目非常喜欢阴人,即使他说了数据在32为整数以内也不能信

这话说的就很不科学了,如果出题人在数据范围里骗人,那就是他有严重的问题了
其实问题在于 a 和 b 在32位有符号整数范围内不代表 a 的绝对值在32位有符号整数范围内

tommyyu 发表于 2022-11-27 10:50:34

本帖最后由 tommyyu 于 2022-11-27 10:55 编辑

dolly_yos2 发表于 2022-11-27 10:49
这话说的就很不科学了,如果出题人在数据范围里骗人,那就是他有严重的问题了
其实问题在于 a 和 b 在32 ...

那这道题应该是你说的原因

我记得之前好像有一个csp考试说最大数据范围是2500,然后出了个2501的数据{:10_282:}
页: [1]
查看完整版本: C++中的 abs 函数会不会出问题?