编写一个递归函数来检查数字中有多少位可以除以它们后面的数字。例子:84963
应该返回 2,因为 8 可以除以 4,6 可以除以 3。我的函数似乎根本没有输出任何内容。
#include <iostream>
using namespace std;
int fun (int n);
int main()
{
int n;
cin >> n;
cout << fun(n) << endl;
return 0;
}
int fun(int n){
int count = 0;
if (fun(n % 100) % fun(n % 10) == 0)
count++;
return count;
}
您的递归目前没有多大意义。一个更合乎逻辑的方法是查看最后一个数字(所以1
in 321
),当前可以除倒数第二个数字(所以2
in 321
)。您可以通过定义一个函数来检查这是否可能,并递归地传递除以 10 的数字来完成此操作。该函数如下所示:
int fun(int n)
{
if (n < 10)
return 0;
int last = n % 10;
n = n / 10;
int secondlast = n % 10;
if (secondlast != 0 && last != 0 && secondlast % last == 0)
return 1 + fun(n);
else
return fun(n);
}
更新说明:在从莫斯科的评论中研究了弗拉德之后,我移动了last != 0
部分条件向前推进,解决 bug(除以 0)。
来自莫斯科的弗拉德(Vlad)谈论的问题如下:例如,如果您想要零件04
要计为 0,您应该使用上面的代码。否则你应该删除secondlast != 0
part.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)