求解编程题

2025-02-22 10:33:57
推荐回答(3个)
回答1:

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

{

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);

}

具体的运行结果截图(最小公倍数截图文字错了 代码已修改):

回答2:

#include
#include
int q(int c,int d)
{
int i,n,min,x,y;
x=c;
y=d;
min=(cfor(i=2;i{
if(c%i==0&&d%i==0)
{
c=c/i;
d=d/i;
min=(ci=1;
}
}
printf("最大公约数:%d\n",x/c);
printf("最小公倍数:%d\n",c*d*x/c);
}
int main(void)
{
int a,b,n;
printf("input a:");
scanf("%d",&a);
for(;;)
{
if(a<2)
{
printf("reinput a:");
scanf("%d",&a);
}
else break;
}
printf("input b:");
scanf("%d",&b);
for(;;)
{
if(b<2)
{
printf("retry:");
scanf("%d",&b);
}
else break;
}
q(a,b);
return 0;
}
//求最大公约数和最小公倍数的。
#include
main()
{
int m,i,k;
scanf("%d",&m);
k=sqrt(m);
for(i=2;i<=k;i++)
if(m%i==0)break;
if(i>=k+1)printf("%d is prime number",m);
else
printf("%d is not prime number",m);
}
//判断是否为素数。

回答3:

已写好,采纳后立即发送你邮箱。
详细注释,对以上问题教到会为止。