问答详情
源自:4-15 编程练习

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

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位数呀? 

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

提问者:慕雪9328392 2016-03-06 10:10

个回答

  • 墨_______墨
    2016-03-06 11:00:47
    已采纳

    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

  • qq_飞飞飞_1
    2016-03-06 11:16:42

    因为你定义的是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位数!

  • 6666667
    2016-03-06 10:44:41

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