gpt4 book ai didi

c - 具有整数溢出条件的整数的反转

转载 作者:行者123 更新时间:2023-11-30 14:56:58 26 4
gpt4 key购买 nike

long long  reverse(long long x) {
long long reversednum=0;
int sign=1;
if(x<0)
sign=-1;
x=abs(x);

while(x)
{
reversednum=reversednum*10;
reversednum=reversednum+(x%10);
x=x/10;
}

return (reversednum<INT_MAX || reversednum>INT_MIN)?reversednum*sign:0;
}

除了这个 1534236469 返回输出 1056389759 之外,我的大多数测试用例都得到了满足。我看到了很多建议并将其更改为 long long。但仍然产生相同的结果。希望有人能帮助我。提前致谢!! 假设输入是 32 位有符号整数。当反转的整数溢出时,我的函数应该返回 0

最佳答案

我确信您一定在 printf 中使用 %ld...使用 %lld!简单的错误:)

分析发生的事情:

当你进入1534236469结果应该是 9646324351,它是由函数正确生成的(是的!)。

在二进制中, 9646324351 写为 00000010 00111110 11110111 00111010 01111111 。现在,编译器为 long 分配 4 个字节,为 long long 分配 8 个字节。因此,当您打印 long (本来应该是 long long 的地方)时,编译器将简单地从二进制文件中取出前 4 个字节并丢弃其余部分。这意味着您的编译器只需要 00111110 11110111 00111010 01111111 ,相当于十进制的 1056389759 。因此输出...所以这意味着你的函数和逻辑是正确的(phewwww....!!!!)但是你犯了一个愚蠢的错误。

关于c - 具有整数溢出条件的整数的反转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44229392/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com