这是我的倒数程序,但当我输入5位数字时,有时答案是正确的,肯定的,有时是否定的。
#include<dos.h>
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
int main()
{
clrscr();
int a,b,c;
b=0;
printf("Enter the no");
scanf("%d",&a);
c=a;
while(a>0)
{
b=(b*10)+(a%10);
a=a/10;
}
printf("\noriginal no %d",c);
printf("\nreversed no is %d",b);
getch();
return 0;
}
如果输入:12111
输出:11121
输入:22333
输出:-32214
整数的极限是从-32768到32767,那么为什么答案是负数呢?
我试着用long,但我的倒数是0。
最佳答案
正如Bathsheba所提到的,sizeof(int)
显然是2,并且考虑到您正在使用的头文件,该平台是MS-DOS,这意味着您的int
只有16位信息可用。因为第一位是符号位,所以剩下15位,2^15是32768,这意味着您的范围是-32767..+32767。你想要的是unsigned int
和%u
的scanf
和printf
。这将允许您使用0..65535。
需要能够处理所有5位数字?改为切换到long
(除了分别使用%ld
或%lu
表示有符号或无符号外,是否使其有符号或无符号无关紧要),您将拥有-2147483648..+2147483647(有符号)或0..4294967295(无符号),这将为5位数字提供足够的范围。
如果您在使用long时遇到问题,并且scanf和printf的格式正确,那么问题就出在您的逻辑上,而不是您对数字的读取上。
关于c - 反转5位数字可得到负数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24575588/