2014-09-23 33 views
-1

需要幫助的我是新手到C++,我試圖讓一個控制檯程序,列出主要numbers.I我在獲得預期的結果,因爲它顯示在固定的素數程序

2 is a prime number 

後停止有問題的這是錯誤的,列表不完整。請檢查我的代碼並幫我修復它。

#include<iostream> 
using namespace std; 

int main() 
{ 
    int num,divi,count=0; 

    for(num=0;num<10;num++) 
    { 
     for(divi=1;divi<=num;divi++) 
     { 

      if(num%divi==0) 
      { 
       count++; 
      } 
      if(count==2){ 
       cout<<num<<"is a prime number"<<endl; 
      } 

     } 
    } 

} 

回答

2

你必須初始化計算每個當一個新號碼被檢查時。第二個if語句必須放在內部循環之外。 例如

for(num=0;num<10;num++) 
{ 
    count = 0; 
    for(divi=1;divi<=num;divi++) 
    { 

     if(num%divi==0){count++;} 
    } 

    if(count==2){cout<<num<<"is a prime number"<<endl;} 

} 

考慮到2是一個質數。

另外,在不使用聲明區域的地方聲明變量並不是一個好主意。我會寫程序一樣

#include <iostream> 

int main() 
{ 
    const int N = 10; 

    for (int num = 0; num < N; num++) 
    { 
     int count = 0; 

     for (int div = 1; div <= num; div++) 
     { 
      count += num % div == 0; 
     } 

     if (count == 2) std::cout << num << " is a prime number" << std::endl; 
    } 

    return 0; 
} 

或代替

count += num % div == 0; 

你可以寫在你的原始程序

if (num % div == 0) ++count; 
+0

非常感謝!但是是否有任何其他更有效的方法來獲得相同的結果,即更短的代碼.. – Neek 2014-09-23 17:47:42

+0

@Neek檢查除數是滿足條件除數*除數<​​=數目 – 2014-09-23 17:56:12

+0

我猜num 2014-09-23 18:32:06

0

您需要在外循環的每次迭代開始時將count重置爲0。你可能只是在那裏宣佈計數。

+3

我也建議你要學會使用調試器( eg gdb) – happydave 2014-09-23 17:39:18

0

您未能在第一次檢查後重置count,所以它在2當您檢查3號

您應該重置開始計數每次迭代:

for(num=0;num<10;num++) 
{ 
    count = 0; 
    ... // Rest of the code here 
} 
+0

謝謝..但爲什麼4,8,9也顯示爲素數numbers.Please建議修復我的logic.EDIT:謝謝....修復它 – Neek 2014-09-23 17:43:34