如何在c++中获得任意返回值



我想写一个除数函数,它给出了给定数字的所有除数。但是我不想要任何数组我想要一个一个地返回所有的除数。这可能吗?

这是代码:

auto allDivisor(int num){
for (int i=1; i<=num; i++){
if(num % i == 0){
return i;
}
}

但是我只得到了第一次迭代的结果:Enter integer number : 10 All divisior of 10 : 1

通常的方法是多次调用你的函数,每次它都会返回不同的除数,直到结束被一些特殊的返回值标记,如0…迭代可以通过传递i作为函数参数或将其作为全局或静态变量来完成,但这会使您的函数线程不安全,禁止并行使用它(即使在串行中与其他划分重叠)……它看起来像这样:

int allDivisor(int num)
{
static int i=0;
for (i++;i<=num;i++)
if ((num%i)==0) return i;
if (i>num){ i=0; return 0; }
}

和用法:

int d,X;
for (X=32;;)
{
d=allDivisor(X);
if (!d) break;
cout << d;
}
for (X=125;;)
{
d=allDivisor(X);
if (!d) break;
cout << d;
}
输出:

1
2
4
8
16
32
1
5
25
125

然而,确保你总是调用allDivisor,直到它返回0,否则它的下一次使用将被搞砸(跳过第一个除数,直到最后一个i状态)…这也可以修复,例如这样(以另一个静态变量为代价):

int allDivisor(int num)
{
static int i=0,n=0;
if (n!=num){ n=num; i=0; }
for (i++;i<=num;i++)
if ((num%i)==0) return i;
if (i>num){ i=0; n=0; return 0; }
}

最新更新