2015-10-29 61 views
-4

我试图找到一个数字(n)的所有除数,并添加到第一个功率(只出现一次)的那些除数,但我得到输出只是零,我的代码有什么问题?C++不清楚的输出

#include<iostream> 
using namespace std; 

int k,A[100000],n,p,d=2,pozitia=0; 
int main() 
{ 
    cin>>n; 

    while(n>1) 
    { 
    p=0; 
    while(n%d==0) 
    { 
     p=p+1; 
     n=n/d; 
    } 
    if (p==1) { A[pozitia]=d; pozitia++; } 
    d=d+1; 
    } 

    for (int i=0;i<=pozitia;i++) cout<<A[pozitia]<<" "; 
    return 0; 
} 
+1

你看到了什么,当你在调试器中运行? –

+0

http://ericlippert.com/2014/03/05/how-to-debug-small-programs/ –

+0

谢谢男人,我知道但我有debuger的问题,它不起作用 – Andrew

回答

2

我无法按照你的逻辑计算除数。它似乎比你想象的要简单得多。

int stop = n/2 + 1; 
for (; d < stop; ++d) 
{ 
    if (n % d == 0) 
    { 
     A[pozitia]=d; 
     pozitia++; 
    } 
} 

下面是使用该逻辑的程序。

#include<iostream> 
using namespace std; 

void printDivisors(int A[], int pozitia) 
{ 
    for (int i=0;i<pozitia;i++) cout<<A[i]<<" "; 
} 

void fun(int n) 
{ 
    int A[100000]; 
    int d = 2; 
    int pozitia=0; 

    int stop = n/2 + 1; 
    for (; d < stop; ++d) 
    { 
     if (n % d == 0) 
     { 
     A[pozitia]=d; 
     pozitia++; 
     } 
    } 

    printDivisors(A, pozitia); 
} 

int main() 
{ 
    int n; 
    cin>>n; 
    fun(n); 
    return 0; 
} 

输出为100输入:

2 4 5 10 20 25 50 
+0

我需要素数除数 – Andrew

+0

但没关系,谢谢! – Andrew

3

您打印总是相同的价值:

for (int i=0;i<=pozitia;i++) 
    cout<<A[pozitia]<<" "; 

应该

for (int i=0;i<pozitia;i++) 
    cout<<A[i]<<" "; 

另外要注意,它应该是i<pozitia,而不是i<=pozitia因为你每次插入的时间增加pozitiapozitia末尾的新值将指向A中未初始化的值。