C语言整形循环输入固定位数,C语言——分别用循环,goto语句以及递归实现对一个整形数据的位数统计...

我们在学习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。

以上就是用这三种方法实现位数统计,殊途同归,每一种方法都有自己的优点,大家在编程中选择最合适的为妙!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值