这是我打印除数的代码,然后是给定数字的除数。
现在假设我接受2个测试用例:5和8;这段代码将5的计数表示为2,将8计数为6(即它增加了先前的计数)。
即使我将其声明为int count = 0;
,它也会返回相同的输出。
当我在函数int count = 0
中声明factors
时,会出现另一个问题。
对于所有情况,代码都将计数设为0.
#include<iostream>
using namespace std;
int count;
long long factors(long n, long f=1)
{
if(n%f==0) {
cout << f << endl;
count++;
}
if(f==n) {
return 0;
}
factors(n,f+1);
return count;
}
int main()
{
int n;
int t;
cin >> t;
while(t--)
{
cin >> n;
cout << factors(n) << endl;
}
return 0;
}
答案 0 :(得分:1)
使用全局变量通常不是一个好主意。它在递归函数中尤其糟糕,它最好是可重入的。当然,您可以通过重置循环中的计数来修复您的功能,如下所示:
while(t--)
{
cin>>n;
count = 0; // Reset count before the recursive call
cout << factors(n) << endl;
}
您还可以使factors
“包装器”重置count
,以便在调用count
之前将调用者从重置factors
中解放出来,如下所示:
long long factors(long n) {
count = 0;
return factors(n, 1);
}
long long factors(long n,long f /* Remove the default */) {
... // the rest of your code
}
答案 1 :(得分:1)
你可以通过将计数作为参考来实现这一点 -
#include<iostream>
using namespace std;
long long factors(long n, int& count, long f=1)
{
if(n%f==0)
{
cout<<f<<endl;
count = count + 1;
}
if(f==n)
return 0;
factors(n, count, f+1);
return 0;
}
int main()
{
int n,t;
cin>>t;
while(t--)
{
cin>>n;
int count = 0;
factors(n, count);
cout << count << endl;
}
return 0;
}
-Gaurav
答案 2 :(得分:0)
首先,为什么要在全局空间中声明count变量?
其次,您不能对未声明的变量执行算术运算(在这种情况下,int“count”永远不会被声明)。
第三,为什么要通过while(t - )来创建无限循环?
你说这个函数让你为所有输入计数为0, 这可能是由于计数从未被宣布过吗?