:-D (淼淼淼)

P1001 A+B Problem

uid_310801 @ 2021-10-13 20:26:47

#include<bits/stdc++.h>
using namespace std;
int main(){
    unsigned int a,b;
    cin>>a>>b;
    cout<<a+b;
    return 0;
}

此代码可以通过A+B,而题目中明确说明有负数。说明数据强度不够,建议加强数据


by _JY_ @ 2021-10-13 20:28:56

sq...lm?


by uid_310801 @ 2021-10-13 20:32:06

经过实验发现定义int a b然后输出abs(a+b)能ac说明答案都是正数。那么unsigned相加的时候到底会遵循什么样的原则呢?一正一负的unsigned且正数绝对值大于负数的绝对值,那它们相加时为什么可以输出正确的答案呢?


by hjxhjx @ 2021-10-13 20:36:54

输入和相加的时候各溢出一次,然后又变成正确答案了


by NaOH_Frog @ 2021-10-13 20:38:14

并不,原来和是负数的现在会输出正数(


by chaichunyang @ 2021-10-13 20:40:52

没必要吧,a+b不需要在意


by 王熙文 @ 2021-10-13 20:42:42

可是 https://www.luogu.com.cn/record/59776577

不懂


by uid_310801 @ 2021-10-13 20:47:34

@王熙文 是啊,题目数据有负数没错,但是没有a和b都是正数的,而有两个点是有一个正数,有一个负数。

而那个负数的绝对值又比正数的小,所以答案都是正数(或0?)


by _Veritas @ 2021-10-13 20:51:29

数据里存在ab<0的情况,但是不存在a+b<0的情况。

所以@王熙文 的代码会RE。

而输入的a为负数时,变量a中储存的值为 2^{32}+a,所以 a+b=2^{32}+a+b 溢出为 a+b


by uid_310801 @ 2021-10-13 20:54:38

@_Veritas 懂了懂了%


by uid_310801 @ 2023-03-27 20:44:37

并不,原来和是负数的现在会输出正数(


|