这是我的倒数程序,但当我输入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%uscanfprintf。这将允许您使用0..65535。
需要能够处理所有5位数字?改为切换到long(除了分别使用%ld%lu表示有符号或无符号外,是否使其有符号或无符号无关紧要),您将拥有-2147483648..+2147483647(有符号)或0..4294967295(无符号),这将为5位数字提供足够的范围。
如果您在使用long时遇到问题,并且scanf和printf的格式正确,那么问题就出在您的逻辑上,而不是您对数字的读取上。

关于c - 反转5位数字可得到负数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24575588/

10-10 14:02