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位数呀?
小白刚学,脑子没有转过来 望大神指出我哪边错了 万分感谢!
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
因为你定义的是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位数!
if(num>=0&&num<=99999999){ do{count++; num/=10;} while(num/10);} System.out.println("它是个"+ count+"位的数!"); /*正确的代码应该是这样吧,你的代码里只有判断没有循环,所以一次就直接跳到了println,应该再加个循环代码,*/