C语言
第四章
4.1.1循环
数数几位数
程序要读入一个4位以下(含4位)的正整数,然后输出这个整数的位数。如:
输入352.输出:3
人VS计算机
人的方式:眼睛一看就知道了
计算机的方式:判断数的范围来决定它的位数
352∈[100,999]->3位
人不擅长,因为人对数字的计算能力比文字弱
程序实现
int x;
int n = 1 ;
scanf ( "%d" , & x) ;
if ( x> 999 ) {
n = 4 ;
} else if ( x> 99 ) {
n = 3 ;
} else if ( x> 9 ) {
n = 2 ;
} else {
n = 1 ;
}
printf ( "%d\n" , n) ;
因为题目明确了4位数及以下的正整数,所以可以简化一些判断
因为从高处往下判断,所以不需要判断上限了
问题:任意范围的正整数怎么办?
不可能每多加一位数就多加一个if,这样下去无穷尽也
换个方式想
352->3 很快
123812843267518273618273612675317是几位数?
数数!
数数
123812843267518273618273612675317
人怎么数?从左往右数,一次划掉一个数字
计算机怎么划掉那个数字呢?
三位数逆序的题
352
那么123812843267518273618273612675317%100000000000000000000000000000000->23812843267518273618273612675317
怎么得到那100000000000000000000000000000000?
人VS计算机
如果换一下,从右边开始划
123812843267518273618273612675317/10->12381284326751827361827361267531
去掉最右边的数,然后?
不断地划,直到没数可以划…
试试代码
int x;
int n= 0 ;
scanf ( "%d" , & x) ;
n++ ;
x/ 10 ;
if ( x> 0 ) {
n++ ;
x/= 10 ;
if ( x> 0 ) {
n++ ;
x/= 10 ;
if . . .
}
}
printf ( "%d" , n) ;
int x;
int n= 0 ;
scanf ( "%d" , & x) ;
n++ ;
x/ 10 ;