无法得到所需的最大公约数

输出两个数求最大公倍数,所得值错误,请问是什么原因?程序和运行皆如下所示

img

由于for循环结尾多了分号,导致循环空转,最终i=24停止
然后if判断不满足,所以gcd是一个随机值

for语句后面的分号删掉

for循环那里的问题,修改如下,望采纳!!


#include <stdio.h>
#include <stdlib.h>


int main()
{
   int num1,num2,i,gcd;
   scanf("%d %d",&num1,&num2);
    for(i=1;i<=num1&&i<=num2;++i){
        if(num1 % i ==0 && num2 % i==0){
               gcd = i;
        }
        
    }
   printf("最大公约数为%d",gcd);
   return 0;
}

运行结果:

img

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/267559
  • 这篇博客你也可以参考下:物联网智能办公解决方案成为必然趋势
  • 除此之外, 这篇博客: 求最大公约数及求多个数的最大公约数中的 穷举法: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 分析:一组数的最大公倍数肯定小于这组数的最小数,然后从这个最小数开始穷举,每次判断这组数是否可以全部整除这个数,若可以,则该数为这组数的最大公约数;否则,继续穷举;知道找到为止。
    代码实现:

    #include<stdio.h>
    #include<stdbool.h>
    #include<math.h>
    #define max 4
    void set_array();//初始化数组
    void print_array();//输出数组
    int Min_Num(int *p);//返回数组中的最小数
    bool Determine_divisible(int *p, int n);//判断n是否可以整除*p中所有数
    int main()
    {
    	int a[max] = { 0 };
    	set_array(a);
    	print_array(a);
    	int min = Min_Num(a);
    	for (int i = min; i > 0; i--)
    	{
    		if (Determine_divisible(a, i))
    		{
    			printf("\n这几个数的最小公约数:%d\n", i);
    			break;
    		}
    	}
    	for (int i = a[0]; i > 0; i--)
    	//此处i的初始值不同,相比与上一个循环可以不用Min_Num()函数的辅助,省去求最小值的时间。
    	/*给i赋这组数中任意值,若改值可以被其他数整除,故该数为最大公倍数(这种情况只存在于所给数恰好为最小数,且该数可以整除其余数)
    	否则递减,直到满足所有数都可被i整除	*/
    	{
    		if (Determine_divisible(a, i))
    		{
    			printf("这几个数的最小公约数:%d\n", i);
    			break;
    		}
    	}
    	return 0;
    }
    void set_array(int p[])
    {
    	for (int i = 0; i < max; i++)
    	{
    		scanf("%d", &p[i]);
    	}
    }
    void print_array(int *p)
    {
    	for (int i = 0; i < max; i++)
    	{
    		printf("%d\t", p[i]);
    	}
    }
    int Min_Num(int *p)
    {
    	int t = p[0];
    	for (int i = 1; i < max; i++)
    	{
    		t = p[i]>t ? t : p[i];
    	}
    	return t;
    }
    bool Determine_divisible(int *p, int n)
    {
    	for (int i = 0; i < max; i++)
    	{
    		if (p[i] % n != 0)
    		{
    			return false;
    		}
    	}
    	return true;
    }
    
  • 您还可以看一下 韦语洋(Lccee)老师的一机一码加密、被破解自动销毁随时授权回收升级系列视频课程课程中的 演示如何破解一个软件绕过注册机(仅作为后续课程的了解)小节, 巩固相关知识点