C++ 递归返回可被给定整数k整除的位数
我在获取程序以提供所需的输出时遇到了一些问题。程序接收两个整数:n和k。程序返回n中可被k整除的位数(即n%k==0)。请参阅下面的代码C++ 递归返回可被给定整数k整除的位数,c++,algorithm,recursion,C++,Algorithm,Recursion,我在获取程序以提供所需的输出时遇到了一些问题。程序接收两个整数:n和k。程序返回n中可被k整除的位数(即n%k==0)。请参阅下面的代码 int numDigitsDivk(int n, int k) { // complete this function if(n < k) return 0; else if (n < 10) return 1; else{ if(n%k == 0) r
int numDigitsDivk(int n, int k) { // complete this function
if(n < k)
return 0;
else if (n < 10)
return 1;
else{
if(n%k == 0)
return n%10;
else
return numDigitsDivk(n%10, k) + n%10;
}
}
int main() {
cout << "*** Number of digits divisible by k ***" << endl;
cout << "Number of digits in 123076 is " << numDigitsDivk(123076, 1)
<< endl;
cout << "Number of even digits in 689201 is " << numDigitsDivk(689201, 2)
<< endl;
cout << "Number of digits in 6592073 that are divisible by 3 is "
<< numDigitsDivk(6592073, 3) << endl;
}
然而,我得到的结果是不正确的。我们需要递归地编写这个函数,我很确定我的问题来自于对递归步骤的过度思考或对基本情况的错误理解(或两者兼而有之) 在您的代码中,当您将
n%10
传递到递归时,您只考虑最后一个数字。由于必须考虑给定数字中的每个数字,因此必须通过n/10
,并在n
的最后一个数字可被k
整除时增加计数
int numDigitsDivk(int n, int k) { // complete this function
if(n == 0)
return 0;
int digit = n%10;
// if divisible, increment the number of divisible digits
if (digit%k==0)
return numDigitsDivk(n/10,k)+1;
else
return numDigitsDivk(n/10,k);
}
在代码中,在将
n%10
传递到递归时,只考虑最后一个数字。由于必须考虑给定数字中的每个数字,因此必须通过n/10
,并在n
的最后一个数字可被k
整除时增加计数
int numDigitsDivk(int n, int k) { // complete this function
if(n == 0)
return 0;
int digit = n%10;
// if divisible, increment the number of divisible digits
if (digit%k==0)
return numDigitsDivk(n/10,k)+1;
else
return numDigitsDivk(n/10,k);
}
你需要计算哪些在这个范围内是可除的,而不是一个整数。@Raymond你的意思是在n<10之前执行n%10,然后在这一点上实现递归?你需要计算哪些在这个范围内是可除的,而不是一个整数。@Raymond你的意思是在n<10之前执行n%10,然后在那一点上实现递归?啊,你比我快了。我将删除我的答案。回答得好。@3r啊,这更有意义,谢谢。但是,因为这里的基本情况中的唯一步骤返回0,所以所有输出都是1。在返回1的基本情况下,不应该有另一个步骤吗?@BoolBordan07对不起。。我不明白你的意思。您是否正在告诉我某个数字
n
?Wander3r nevermind出错(写入if(数字%10…
),而不是if(数字%k…
。看起来都不错。谢谢你的帮助!啊,你比我快了。我会删除我的答案。回答很好。@Wander3r啊,这更有意义,谢谢。但是,因为这里的基本情况中唯一一步返回0,所以所有输出都是1。基本情况中不应该有另一步返回1吗?@boobordan07抱歉..没有理解你。是吗你说某个数字失败了吗?@Wander3r nevermind,犯了一个错误(写了if(数字%10…
),而不是if(数字%k…
),看起来都很好。谢谢你的帮助!