English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
所有分類

輸入一個整數a
輸出一個最接近a的質數
要用do while做喔!
拜託大家
謝謝!

2006-07-25 10:32:47 · 2 個解答 · 發問者 W 1 in 電腦與網際網路 程式設計

不好意思
用visual c++ 好像不能跑耶
我只有這個程式...

2006-07-25 11:22:07 · update #1

2 個解答

先算出大於 a 和小於 a 的質數,得出兩個質數…
最後…再檢查哪一個質數「最」接近 a 數。

//Power by Microsoft Visual Studio 2005
//可以使用 Dev-C++ 編譯此程式
#include
#include
#include
int main(int argc, char *argv[])
{
//=====START=====//
int check_prime(int number);
int a,nhighPrime,nlowPrime,retHigh,retLow;
printf("Input a integer: ");
scanf("%d",&a);
nlowPrime=a;
nhighPrime=a;
do{
retLow=check_prime(nlowPrime);
nlowPrime--;
}while(!retLow);
do{
retHigh=check_prime(nhighPrime);
nhighPrime++;
}while(!retHigh);
if(a-(++nlowPrime)>(--nhighPrime)-a){
printf("Ans: %d\n",nhighPrime);
}else if(a-(++nlowPrime)==(--nhighPrime)-a){
printf("Ans: %d, %d\n",nlowPrime,nhighPrime);
}else if(a-(++nlowPrime)<(--nhighPrime)-a){
printf("Ans: %d\n",nlowPrime);
}
//=====END=====//
system("PAUSE");
return 0;
}
int check_prime(int number){//Check number
int i,retBoolean=1;
//1 is True, 0 is False
for(i=2;i<=(int)sqrt(number);i++){
if((number%i)==0){
retBoolean=0;//false
break;
}
}
return retBoolean;//return boolean value
}

2006-07-25 22:03:18 補充:
目前微軟官方網站有提供 Visual Studio Express 版本的編譯軟體,是可以免費下載的,包括 VB、VC++、…網址:http://www.microsoft.com/taiwan/vstudio/express/default.aspx

2006-07-27 11:03:00 補充:
抱歉!上面有錯誤的程式碼:
錯誤=>nlowPrime=a;
錯誤=>nhighPrime=a;
應修正為…
正確=>nlowPrime=a-1;
正確=>nhighPrime=a+1;

==============================

2006-07-25 11:09:26 · answer #1 · answered by Big_John-tw 7 · 0 0

回發問者,小綿羊的程式可以用visual c++跑喔,我就是用這個軟體跑的,而且我也只是複製貼上按編譯,然後就正常執了。

2006-07-25 11:34:19 · answer #2 · answered by Almond 6 · 0 0

fedest.com, questions and answers