| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1143 人关注过本帖
标题:刚编的求最大公约数运行结果不理想。(书上的方法就不要推荐了)
只看楼主 加入收藏
ningye
Rank: 2
等 级:论坛游民
帖 子:33
专家分:22
注 册:2011-9-22
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:12 
刚编的求最大公约数运行结果不理想。(书上的方法就不要推荐了)
main()
{int a,b,i;
printf("input two numbers:");
scanf("%d,%d",&a,&b);
i=a;
while(a%i!=0||b%i!=0){i--;}
printf("zui da yue shu:%d\n",i);
return 0;
}
最大公约数一定小于等于a,b且大于等于1。每次i--;最终得到最大公约数2。算法错了吗?为什么不正确
搜索更多相关主题的帖子: numbers return 公约数 
2011-09-23 21:59
ningye
Rank: 2
等 级:论坛游民
帖 子:33
专家分:22
注 册:2011-9-22
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册
2011-09-23 22:00
waterstar
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:984
专家分:2810
注 册:2010-2-12
收藏
得分:2 
最大公约数最好的方法就是辗转相除法
程序代码:
#include <stdio.h>

int main()
{
    int        a, b, n;
    printf ("imput two numbers:\n");
    scanf ("%d%d", &a, &b);
   

    while (a % b != 0)
    {
        n = a % b;
        a = b;
        b = n;
    }
    printf ("largest common divisor :%d\n", b);
    return 0;
}


冰冻三尺,非一日之寒;士别三日,不足刮目相看!
2011-09-23 22:17
ningye
Rank: 2
等 级:论坛游民
帖 子:33
专家分:22
注 册:2011-9-22
收藏
得分:0 
回复 3楼 waterstar
你能不能换一种
2011-09-23 22:19
A13433758072
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广东潮州
等 级:小飞侠
威 望:1
帖 子:1182
专家分:2784
注 册:2010-7-22
收藏
得分:2 
回复 2楼 ningye
算法错误 如果有一个自然数a能被自然数b整除,则称a为b的倍数,b为a的约数。几个自然数公有的约数,叫做这几个自然数的公约数。公约数中最大的一个公约数,称为这几个自然数的最大公约数。
这个有几种方法,下面是两种不错的方法:
(1)求差判定法.

如果两个数相差不大,可以用大数减去小数,所得的差与小数的最大公约数就是原来两个数的最大公约数.例如:求78和60的最大公约数.78-60=18,18和60的最大公约数是6,所以78和60的最大公约数是6.


如果两个数相差较大,可以用大数减去小数的若干倍,一直减到差比小数小为止,差和小数的最大公约数就是原来两数的最大公约数.例如:求92和16的最大公约数.92-16=76,76-16=60,60-16=44,44-16=28,28-16=12,12和16的最大公约数是4,所以92和16的最大公约数就是4.

(2)辗转相除法.

当两个数都较大时,采用辗转相除法比较方便.其方法是:

以小数除大数,如果能整除,那么小数就是所求的最大公约数.否则就用余数来除刚才的除数;再用这新除法的余数去除刚才的余数.依此类推,直到一个除法能够整除,这时作为除数的数就是所求的最大公约数.

例如:求4453和5767的最大公约数时,可作如下除法.

5767÷4453=1余1314

4453÷1314=3余511

1314÷511=2余292

511÷292=1余219

292÷219=1余73

219÷73=3

于是得知,5767和4453的最大公约数是73.

辗转相除法适用比较广,比短除法要好得多,它能保证求出任意两个数的最大公约数.
参考资料: zhidao.baidu.com/question/144478190.html

一步一个脚印...............................默默地前进.....
诚邀乐于解答c菜鸟问题,的热心网友加入,  QQ群38490319
2011-09-23 22:20
ningye
Rank: 2
等 级:论坛游民
帖 子:33
专家分:22
注 册:2011-9-22
收藏
得分:0 
回复 5楼 A13433758072
18.和36的最大公约数是多少?不要诱导我哦
2011-09-23 22:25
abc67662957
Rank: 1
等 级:新手上路
帖 子:9
专家分:5
注 册:2011-9-9
收藏
得分:2 
这个程序写的没问题吧 我用VC验证是对的
图片附件: 游客没有浏览图片的权限,请 登录注册
2011-09-23 22:26
BenLeoLee
Rank: 1
等 级:新手上路
帖 子:2
专家分:2
注 册:2011-9-17
收藏
得分:2 
运行了一下,貌似没有错,只是稍微改了一下,格式的介意你好好学学,不要受谭版的影响,格式太差了,还有书上的辗转相除应该是比较好的算法,你这个暴力耗时比较多,尤其是当数字比较大的时候。


#include<stdio.h>
int main()
{
    int a,b,i;
    printf("input two numbers:\n");
    while(scanf("%d %d",&a,&b)!=EOF)
    {
        i=a;
        while(a % i != 0 || b % i != 0)
        {
            i--;
        }
        printf("zui da yue shu:%d\n",i);
        printf("input two numbers:\n");
    }
    return 0;
}
2011-09-23 22:27
ningye
Rank: 2
等 级:论坛游民
帖 子:33
专家分:22
注 册:2011-9-22
收藏
得分:0 
回复 7楼 abc67662957
郁闷编译器老是出问题浪费时间。能把你VC发我一下吗?1490949399
2011-09-23 22:34
ningye
Rank: 2
等 级:论坛游民
帖 子:33
专家分:22
注 册:2011-9-22
收藏
得分:0 
回复 8楼 BenLeoLee
哦,谢谢你。虽然我学的不是谭。我开始就是不想和书上的一样,没有考虑那么多。明天再改改
2011-09-23 22:38
快速回复:刚编的求最大公约数运行结果不理想。(书上的方法就不要推荐了)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.037511 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved