我们在学习C语言的时候,经常会遇到一些这样的题目,让你把一个数倒序输出,比如输入12345输出54321,其中一种实现的方法就是先得到这个数的位数,然后再循环分离每个位上的数,让它乘以10的位数-1次方,再累加每个数,而这个算法的基础是得到该数的位数。
下面我们介绍三种方法来实现位数统计算法:
1.用循环实现
循环的形式有很多,在这里我用for循环来举例
#include
#include
int main()
{
int num;
scanf("%d", &num);
int count = 0;
for(; num; num /= 10){
count++;
}
printf("%d\n", count);
return 0;
}
用循环实现很简单,我在这里不过多赘述,大家也可以用while,do-while实现一下。
2.用goto实现
#include
#include
int main()
{
int num;
scanf("%d", &num);
int count = 0;
AA:if (num) { //这里就相当于循环的条件为num不为0
count++;
num /= 10;
goto AA; //通过goto跳转,实现类似于循环的操作
}
printf("%d\n", count);
return 0;
}
用goto语句实现这个算法其实也就是结合if语句,通过跳转转换成循环操作,当num = 0时,不再进入if语句,也就相当于终止了循环。
3.用递归实现
#include
#include
int getnum(int n) {
if (n < 10)
return 1; //当传出的n<10时,说明是一个个位数,那么它的位数就是1
else
return 1 + getnum(n / 10); //否则的话将该数除以10,分离出1位后调用getnum函数
}
int main()
{
int num;
scanf("%d", &num);
int count;
count = getnum(num);
printf("%d\n", count);
return 0;
}
我在刚接触递归函数的时候,也不是很懂,记得当时学长告诉我一句话使我受益匪浅,他说:递归就是要知道它的退出条件和递归过程,这个代码中第4、5行就是递归函数的退出条件,第6、7行就是递归的过程。
例如:传入12345,先执行第7行语句,返回1+getnum(1234),再执行第七行返回1+1+getnum(123),再执行第七行返回1+1+1+getnum(12),再执行第七行返回1+1+1+1+getnum(1),此时1<10,返回1,最后的函数返回5。
以上就是用这三种方法实现位数统计,殊途同归,每一种方法都有自己的优点,大家在编程中选择最合适的为妙!