为了账号安全,请及时绑定邮箱和手机立即绑定

判断一个数的位数,看代码我怎么想不通?求详细解释

if (num >= 0  && num<=999999999){
while(num != 0){
count++;
num/=10;
}
System.out.println("它是个"+ count+"位的数!");
} else{
System.out.println("输入有误!");
}

我的思路:第一次假设num=1,count=0。while(1 !=0)满足,count=1,num=1/10=0.1,输出它是个1位数!

                第二次假设num=10,count=0。while(10 !=0)满足,count=1,num=10/10=1,输出它是个1位数!   然而10却是2位数呀? 

小白刚学,脑子没有转过来 望大神指出我哪边错了  万分感谢!

正在回答

3 回答

num的值是999,count=0,所以num/10第一次得值99.9,去小数位得整数99,此时count++后得值为1;

num第二次循环时值为99,带入执行,num/10=9.9,去小数位得整数9,此时count++,值为2;

num第三次循环时值为9,带入执行,num/10=0.9,去小数位得值为0,此时count++,值为3;

进行第四次循环时,num值为0,不满足循环条件,所以循环终止。最后得出count=3

3 回复 有任何疑惑可以回复我~
#1

慕雪9328392 提问者

谢谢,解释很详细~ 就是为什么除完之后需要把小数点后面的舍去呀? /有取整的作用吗?
2016-03-06 回复 有任何疑惑可以回复我~
#2

墨_______墨 回复 慕雪9328392 提问者

因为num定义为int类型 所以系统默认应该是会去掉小数位
2016-03-07 回复 有任何疑惑可以回复我~

因为你定义的是int整形,所以

1.  num%=10  是除以10后,结果的余数 ,如果num小于10 ,就直接输出这个数 num。

   例如 : int  num=3;num %=10 输出是num=3
2. num/=10  是除以10后, 结果的整数部分  。

   例如 :int  num=3;num/=10 输出是num=0  

第一次假设num=1,count=0。while(1 !=0)满足,count=1,num=1/10=( 0 ,不满足num != 0,退出循环,输出它是个1位数!

第二次假设num=10,count=0。while(10 !=0)满足,count=1,num=10/10=1,

此时,num=1依然满足条件num != 0,再运行一次count=2,num=1/10=( 0 ),不满足num != 0,退出循环,输出它是个2位数!

0 回复 有任何疑惑可以回复我~
if(num>=0&&num<=99999999){
do{count++;
  num/=10;}
  while(num/10);}
  System.out.println("它是个"+ count+"位的数!");
  /*正确的代码应该是这样吧,你的代码里只有判断没有循环,所以一次就直接跳到了println,应该再加个循环代码,*/
0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

判断一个数的位数,看代码我怎么想不通?求详细解释

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信