我需要编写一个接受数字的递归函数,并且需要检查每个数字是否可以与前一个数字整除。例如,如果输入为63542,则结果应为2,而只有6可以被3整除,而4可以被2整除。这些是唯一可以与之前的数字整除的数字。我有以下代码,但每次返回一次。对于上面的例子,它应该返回2,但它返回3.
#include <stdio.h>
int deliv(int num)
{
int temp = num%100;
int counter = 0;
if(num == 0)
{
return 0;
}
else if((temp/10)%(num%10) == 0)
{
counter++;
return counter + deliv(num/10);
}
else return counter + deliv(num/10);
}
int main()
{
int result = deliv(63542);
printf("%d\n", result);
return 0;
}
答案 0 :(得分:1)
您希望将测试条件从if(num == 0)
更改为if(num < 10 )
,因为如果num是一位数字,则temp = num/10
后临时变为0,可被num%10
整除。
另外,添加此条件以避免在两个连续数字为0时发生崩溃。
if(num < 10)
{
return 0;
}
//To avoid crash due to 2 zeroes
else if(temp==0)
{
return counter + deliv(num/10);
}
else if((temp/10)%(num%10) == 0)
{
counter++;
return counter + deliv(num/10);
}
else return counter + deliv(num/10);