QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: fydream

公约数和公倍数的问题,决不是作业!!!

[复制链接]
 楼主| 发表于 2004-10-30 18:15:49 | 显示全部楼层
那需要加什么可以跳出死循环呢?谢谢指教!
回复

使用道具 举报

发表于 2004-10-30 18:20:17 | 显示全部楼层
我发现我的算法有问题。需要改进
回复

使用道具 举报

发表于 2004-10-30 18:31:50 | 显示全部楼层
[code:1]#include <math.h>
int main( ){
        long m,n,r=1;
        scanf("%d %d",&m,&n);
        while(r!=0){
        m=n;
        n=r;
        if(m>n){
                r=m%n;
                }
        else if(m<n){
                r=n%m;
                }
        else {
                printf("gongyue ");
                printf("%d",n);
                }
        }
        if(r==0){
                printf("%d\n",n);
        }
         return (0);
}
[/code:1]

try this
回复

使用道具 举报

 楼主| 发表于 2004-10-30 18:42:35 | 显示全部楼层
AXIN老兄你的算法没有问题我已经验证过了!LOVEWILLIVM老兄谢谢你!我现在就TRY IT!
回复

使用道具 举报

发表于 2004-10-30 19:10:48 | 显示全部楼层
我倒是觉得这个可能会好点,大家看看有没有问题,上面我写的那个问题很大
[code:1]int main()
{
  int a,b,c,f;
        scanf("%d,%d",&a,&b);
        while (a!=b)
          {
            if (b>a)
                {
                        f=a;   a=b; b=f;
                }
        c=a-b;

        if (c>b)
                {
                        f=b;     b=c;         c=f;
                }
        a=b;
        b=c;
          }

                printf("result=%d\n",b);
         
        return 0;
}[/code:1]
回复

使用道具 举报

 楼主| 发表于 2004-10-30 19:43:22 | 显示全部楼层
AXIN老兄!你的这两个代码都没有问题!这个比第一个简练!!太羡慕你们了!我也要努力!
回复

使用道具 举报

 楼主| 发表于 2004-10-30 19:49:24 | 显示全部楼层
[code:1]/*求两个正整数m和n的最大公约数。
分析:求两个正整数的最大公约数采用的辗转相除法求解。以下是辗转的算法:
分别用m,n,r表示被除数、除数、余数。
①求m/n的余数r.
②若r=0,则n为最大公约数.若r≠0,执行第③步.
③将n的值放在m中,将r的值放在n中.
④返回重新执行第①步。*/
#include <math.h>
int main( )
{
    long m,n,r;
    scanf("%d %d",&m,&n);
    loop1: r=m%n;
    loop2: r=n%m;
    if(r!=0)
    {  
    if(m>n)
       {
       m=n;n=r;goto loop1;
       }
    else if(m<n)
       {
       n=m;m=r;goto loop2;
       }
    }
    if(r==0)
    {
       printf("%d\n",n);
    }
          return (0);
}[/code:1]

编译运行结果时:
[fydream@fydream yuandaima]$ gcc -o fy gong.c
[fydream@fydream yuandaima]$ ./fy
5 3
3
[fydream@fydream yuandaima]$ ./fy
3 5
2
[fydream@fydream yuandaima]$ ./fy
5 5
5
只有最后一个运行时对的!我觉得还是中间那部分有毛病!
请帮忙改正一下!谢谢![code:1][/code:1][code:1][/code:1][code:1][/code:1]
回复

使用道具 举报

发表于 2004-10-30 19:59:24 | 显示全部楼层
[code:1]#include <math.h>
int main( )
{
    long m,n,r;
    scanf("%d %d",&m,&n);
    loop: if(r!=0)
    {
    if(m>n)
       {
       m=n;n=r;r=m%n;goto loop;
       }
    else if(m<n)
       {
       n=m;m=r; r=n%m;goto loop;
       }
    }
    if(r==0)
    {
       printf("%d\n",n);
    }
          return (0);
}[/code:1]
回复

使用道具 举报

 楼主| 发表于 2004-10-30 20:13:10 | 显示全部楼层
哦!我明白了!谢谢你兄弟!
回复

使用道具 举报

 楼主| 发表于 2004-10-30 20:20:12 | 显示全部楼层
[fydream@fydream yuandaima]$ gcc -o fy gong.c
[fydream@fydream yuandaima]$ ./fy
5 5
5
[fydream@fydream yuandaima]$ ./fy
5 7
5
[fydream@fydream yuandaima]$
回复

使用道具 举报

发表于 2004-10-30 20:25:03 | 显示全部楼层
[code:1]#include <math.h>
int main( )
{
long m,n,r;
scanf("%d,%d",&m,&n);
loop: if(r!=0)
    {
      if(m>n)
        {
          r=m%n;
          m=n;n=r;goto loop;

        }
      else if(m<n)
        {
          r=n%m;
          n=m;m=r;goto loop;
        }
    }
  if(r==0)
    {
     if(m>n)
      printf("%d\n",m);
      else
      printf("%d\n",n);

    }
  return (0);
}[/code:1]
回复

使用道具 举报

 楼主| 发表于 2004-10-30 20:48:49 | 显示全部楼层
[fydream@fydream yuandaima]$ ./fy
5,5
[fydream@fydream yuandaima]$ ./fy
5,3
1
[fydream@fydream yuandaima]$ ./fy
5,6
1
[fydream@fydream yuandaima]$ ./fy
24,27
3
[fydream@fydream yuandaima]$
除了当两数相等时运行错误,剩下得已经都可以了!等一下我把我的传上来看看!
谢谢你们了几位老兄!
回复

使用道具 举报

 楼主| 发表于 2004-10-30 20:58:51 | 显示全部楼层
[code:1] #include <math.h>
int main( )
{
long m,n,r;
scanf("%d,%d",&m,&n);
if(m==n) printf("%d",m);
loop: if(r!=0)
     {
       if(m>n)
         {
           r=m%n;
           m=n;n=r;goto loop;

         }
       else if(m<n)
         {
           r=n%m;
           n=m;m=r;goto loop;
         }
     }
   if(r==0)
     {
      if(m>n)
       printf("%d\n",m);
       else
       printf("%d\n",n);

     }
   return (0);
}[/code:1]


运行结果:
[fydream@fydream yuandaima]$ gcc -o fy linshi.c
[fydream@fydream yuandaima]$ ./fy
5,5
5[fydream@fydream yuandaima]$ ./fy
24,27
3
[fydream@fydream yuandaima]$ ./fy
2,10
2
万全正确,太好了!今天没有白过,学会了两种算法!真诚得谢谢你们几位得帮助!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-7 05:26 , Processed in 0.080949 second(s), 12 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表