2015-10-29 90 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中未初始化的值。