一个关于数据类型的问题
最近在看谭老的书,在做一练习题时遇到一问题:
一个5位数,要求输出他的每一位数字.
比如:56789 要求输出5,6,7,8,9.
我写的程序是:
#include<stdio.h>
void main()
{
long int num=56789;
int indiv,ten,hundred,thousand,ten_thousand;/*分别代表个位,十位,百位,千位,万位*/
ten_thousand=num/10000;
thousand=(num-ten_thousand*10000)/1000;
hundred=(num-ten_thousand*10000-thousand*1000)/100;
ten=(num-ten_thousand*10000-thousand*1000-hundred*100)/10;
indiv=num-ten_thousand*10000-thousand*1000-hundred*100-ten*10;
printf("每一位数字分别是:%d,%d,%d,%d,%d.\n",ten_thousand,thousand,hundred,ten,indiv);
}
我发现这个程序在num在40000以上的时候这个程序就出现错误了,我看了答案里面是对
thousand=(int)(num-ten_thousand*10000)/1000;
后面的几个式子里都加上了(int)强制转换成了整形
我认为不转换应该也不影响结果的,本身ten-thousand,thousand,等都是int型,式子里是long int然后结果赋给他们,截取int部分的结果则么会错呢?
望各位给出详细解释,换算出错的过程,小弟很是困惑.