[問題] While新手問題

作者: q10242 (黑田祐司)   2015-04-06 18:52:15
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
DevC++
我現在在解高中生解題系統
裡面的質數問題
為了要判斷輸入的數字是否為質數
並且有可能有兩萬個數字要判斷
為了加快速度 因此有建表機制
邏輯:先判斷表內的數字有沒有能整除的 有就不是質數
如果表內沒有 再從1到X-1都整除一次看看 如果有能整除的 就不是質數
如果以上兩個條件都不行 那就是質數 將這個質數存到prime陣列裡面
以後就可以拿出來比對
餵入的資料(Input):
各種自己隨便亂打的整數
預期的正確結果(Expected Output):
如果是質數應該就會有質數出來
不是質數就會有非質數出來
錯誤結果(Wrong Output):
輸入之後毫無反應
程式碼(Code):(請善用置底文網頁, 記得排版)
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
int prime[20000];
int number;
int i=0;
int j;
while(1);
{
scanf("%i",&number);
for (j=0;j<=i;j++)
{
if(number%prime[j]==0)
{
printf("非質數");
continue;
}
}
for (j=2;j<=number;j++)
{
if(number%j==0)
{
printf("非質數");
continue;
}
}
printf("質數");
prime[i]=number;
i++;
}
return 0;
}
補充說明(Supplement):
我認為可能是我while迴圈裡面的scanf出問題
只是不知道該怎麼改
作者: EdisonX (卡卡獸)   2015-04-06 18:54:00
while(1);
作者: sos0214 (kaleidoscope)   2015-04-06 18:57:00
%i應該要改成%d 另外i這樣值是0請忽略我說的XD 是我沒看過%i的format
作者: ChiuTW (Chiu)   2015-04-06 19:13:00
你的 i 不是一直都是 0 嗎 XD我也搞錯,不要理我上面寫的 XD但是 while(1); 啊XD
作者: bibo9901 (function(){})()   2015-04-06 19:37:00
while( scanf(..) != EOF )
作者: x000032001 (版廢了該走了)   2015-04-06 22:00:00
建表用篩法跑完再讀inputfor (j=2;j<=number;j++) 你最後會跟自己除
作者: narukaze (Pt)   2015-04-07 21:54:00
你的continue用法, 即使確定這數是非質數,最後仍然會跑到倒數三行, 所以...會有問題.另外, 依照你的敘述, prime[]內應該是i吧?你參考看看吧 http://i.imgur.com/FMTYRT2.png

Links booklink

Contact Us: admin [ a t ] ucptt.com