请教个简单的问题,有点不明白。
我是新手 自己编了个小程序,有点问题请教给一个不多于5位的正整数,要求:1,求出它是几位数。2,分别打印出每一位数字。3,按逆序打印个位数字。
我是这样编写的:
main()
{
int ge,shi,bai,qian,wan,place;
long num;
scanf("%ld",&num);
if (num<=9999)
{if (num<=999)
{if (num<=99)
{if (num<=9)
place=1;
else place=2;}
else place=3;}
else place=4;}
else place=5;
wan=(int)(num/10000);
qian=(int)((num-wan*10000)/1000);
bai=(int)((num-wan*10000-qian*1000)/100);
shi=(int)((num-wan*10000-qian*1000-bai*100)/10);
ge=(int)(num-wan*10000-qian*1000-bai*100-shi*10);
printf("%d\n",place);
printf("%ld\n",num);
printf("%d%d%d%d%d\n",ge,shi,bai,qian,wan);
}
这个是错误的,当5位数大于32767时打印结果就不对打印出很多的数字。后来让我改成:
main()
{
int ge,shi,bai,qian,wan,place;
long num;
scanf("%ld",&num);
if (num<=9999)
{if (num<=999)
{if (num<=99)
{if (num<=9)
place=1;
else place=2;}
else place=3;}
else place=4;}
else place=5;
wan=(int)(num/10000);
qian=(int)(num-wan*10000)/1000;
bai=(int)(num-wan*10000-qian*1000)/100;
shi=(int)(num-wan*10000-qian*1000-bai*100)/10;
ge=(int)(num-wan*10000-qian*1000-bai*100-shi*10);
printf("%d\n",place);
printf("%ld\n",num);
printf("%d%d%d%d%d\n",ge,shi,bai,qian,wan);
}
这样就对了。但是我不知道为什么不对?
wan=(int)(num/10000);
qian=(int)((num-wan*10000)/1000);
bai=(int)((num-wan*10000-qian*1000)/100);
shi=(int)((num-wan*10000-qian*1000-bai*100)/10);
ge=(int)(num-wan*10000-qian*1000-bai*100-shi*10);
和
wan=(int)(num/10000);
qian=(int)(num-wan*10000)/1000;
bai=(int)(num-wan*10000-qian*1000)/100;
shi=(int)(num-wan*10000-qian*1000-bai*100)/10;
ge=(int)(num-wan*10000-qian*1000-bai*100-shi*10);
效果不是一样的吗
还有个问题:(int)(num-wan*10000)/1000; 假如wan*10000超过了32767,wan是int型,这个结果是怎么转换的
谢谢各位啦 小弟有点笨想学习学习 帮个忙吧