习题5-5 使用函数统计指定数字的个数

前言

选择这个例题,因为里面正好包括了昨天说的递归方法。
其实PTA上的题目一般可以一题多解,发现自己还是有点懒,没有主动思考,一般做过一次答案成功就不去寻求多种解法了,这并不是一个好的学习C的习惯。

正文

题目:本题要求实现一个统计整数中指定数字的个数的简单函数,接口函数定义:int CountDigit( int number, int digit );
其中number是不超过长整型的整数,digit为[0, 9]区间内的整数。函数CountDigit应返回number中digit出现的次数。

输入样例:-21252 2

输出样例:3

三种解题思路

利用while循环(这是我首先想到的,可以看出还非常啰嗦)

int main()
{
    int number, digit;

    scanf("%d %d", &number, &digit);
    printf("Number of digit %d in %d: %d\n", digit, number, CountDigit3(number, digit));

    return 0;
}

/* 你的代码将被嵌在这里 */
int CountDigit( int number, int digit )
{
	int i,res;
	res=0;
	if(number<0)//去掉符号 
	  number=-number; 
	if(number%10==digit)//最尾部的数 
	    res+=1;  
	while(number/=10){//从倒数第二个开始判断 
		i=number%10;
		if(i==digit)
		  res=res+1;
	}
	return res;
} 

利用do…while循环(先循环再判断)

int CountDigit( int number, int digit )
{
	int i,res;
	res=0;
	if(number<0)//去掉符号 
	  number=-number; 
    do{
    	i=number%10;
    	if(i==digit)
	        res+=1;
	} while((number/=10)>0);//打括号,优先级问题 
	
    return res;
} 

利用递归方式(注意循环结构的位置)

int CountDigit( int number, int digit )
{
	static int res;
	   res=0;
	if(number<0)//去掉符号 
	  number=-number; 
    /*
    if(number%10==digit)//错误:不放这里
      res=res+1;*/
    if(number/10>0)
      CountDigit(number/10,digit);
    if(number%10==digit)//正确:放这里
      res=res+1;
    return res;
} 
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值