前言
选择这个例题,因为里面正好包括了昨天说的递归方法。
其实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;
}