PS:兩個的乘積就等於最大公約數和最小公倍數的乘積,所以最小公倍數和最大公約數只要就壹個另壹個就能算出。因為樓主是3個問題,所以還是用三個函數來分別求解:
//最小公倍數
int?getMinMultiple(int?a,?int?b)
{
for(int?i=(a>b)?a:b;?i<=a*b;?i++)
{
if(i%a==0?&&?i%b==0)
{
//return放在for循環內部是因為壹定有最小公倍數
return?i;
}
}
}
//最大公約數
int?getMaxDivisor(int?a,?int?b)
{
int?maxDivisor?=?0;
for(int?i=(a>b)?b:a;?i>=1;?i--)
{
if(a%i==0?&&?b%i==0)
{
maxDivisor?=?i;
//找到後就跳出for循環
break;
}
}
//return放在for循環外面是因為有可能沒有最大公約數
return?maxDivisor;
}
//素數
int?judgePrime(int?a)
{
int?result?=?0;
for(int?i=2;?i<a;?i++)
{
if(a%i?==?0)
{
result?=?i;
break;
}
}
//跟公約數壹樣?如果是素數就返回0?反之則不是素數
return?result;
}
主函數(用DO?WHILE語句主要是用來重復驗證,而不需要退出程序從新運行,因為時間問題壹些特殊值的考慮樓主可以自己添加?^?^):
void?main()
{
int?way,?firstNumber,?secondNumber;
do{
printf("---------------------------------------------------\n");
printf("·請選擇妳的操作(退出請按0):\n");
printf("1求最大公約數\n");
printf("2求最小公倍數\n");
printf("3判斷素數\n\n");
scanf("%d",?&way);
switch(way)
{
case?1:?printf("請輸入需要求解的兩個數:\n");
scanf("%d,%d",?&firstNumber,&secondNumber);
if(getMaxDivisor(firstNumber,?secondNumber)?!=?0)
printf("這兩個數的最大公約數是:%d\n\n",?getMaxDivisor(firstNumber,?secondNumber));
else
printf("這兩個數沒有最大公約數\n\n");
break;
case?2:?printf("請輸入需要求解的兩個數:\n");
scanf("%d,%d",?&firstNumber,&secondNumber);
printf("這兩個數的最小公倍數是:%d\n\n",?getMinMultiple(firstNumber,?secondNumber));
break;
case?3:?printf("請輸入需要求解的數:");
scanf("%d",?&firstNumber);
if(judgePrime(firstNumber)?!=?0)
printf("這個數不是素數\n\n");
else
printf("這個數是素數\n\n");
break;
default:way?=?0;//結束操作
break;
}
}?while(way?!=?0);
}
具體的運行結果截圖(最小公倍數截圖文字錯了?代碼已修改):