最近我尝试编写一个代码来搜索给定n中的某个数字。 代码工作得很好但是当我尝试插入超过10位数的n时,它真的很糟糕。
显然它与代码无关,我只是无法插入超过10位数。 我一定错过了什么......
例如这个简单的代码
#include <stdio.h>
int main()
{
long int n;
scanf("%ld", &n);
printf("%ld", n);
return 0;
}
如果我喂它1111111111它会打印相同的东西,因为它少于11位数 如果我尝试喂它11111111111它会给我类似-1773790777的东西 为什么这发生在我身上?我做错了什么......
答案 0 :(得分:1)
我猜你是在32位机器上,这意味着long int
只有32位,这意味着它可以保持在减去20亿到20亿之间的值。当您尝试输入的内容远远超过该值时,值将换行。
如果你的编译器支持它,你应该开始使用像long long int
这样的64位值。
答案 1 :(得分:1)
有符号整数的溢出是未定义的行为。我认为你的long int
是4个字节,当你输入的数字大于它能容纳的数字时,会导致溢出。