| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1602 人关注过本帖
标题:求公约数
只看楼主 加入收藏
ldsh304
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:242
专家分:755
注 册:2016-1-18
结帖率:100%
收藏
已结贴  问题点数:9 回复次数:6 
求公约数
程序代码:
# include <stdio.h>

int main()
{
    int x, y;
    int i, j;

    printf("输入两个不同整数:\n");
    scanf("%d %d", &x, &y);
    if (x > y)
        for (i=2; i<=y; i++)
            if (y % i == 0)
                if(x % i == 0)
                    j = i;
        printf("最大公约数为: %d\n", j);

    return 0;
}

输入1:
输入两个不同整数:
3
9
最大公约数为: -858993460
输入2:
输入两个不同整数:
9
3
最大公约数为: 3
先不考虑x,y的大小,为啥这样输入 结果会成这样?

[此贴子已经被作者于2016-1-19 20:45编辑过]

搜索更多相关主题的帖子: 公约数 
2016-01-19 20:44
Bingo_yue
Rank: 2
等 级:论坛游民
帖 子:11
专家分:10
注 册:2016-1-10
收藏
得分:9 
当以第一种方式输入的时候,因为j没有赋初值,printf 就输出一个随机值了
2016-01-19 22:25
ldsh304
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:242
专家分:755
注 册:2016-1-18
收藏
得分:0 
恩恩,谢谢了
2016-01-20 13:19
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9008
专家分:53957
注 册:2011-1-18
收藏
得分:0 
程序代码:
#include <stdio.h>

int main( void )
{
    unsigned a, b;
    printf( "输入两个正整数:" );
    scanf( "%u%u", &a, &b );

    for( ; b!=0; )
    {
        unsigned c = a%b;
        a = b;
        b = c;
    }

    printf( "最大公约数为: %u\n", a );
    return 0;
}
2016-01-20 13:38
小明在华科
Rank: 1
等 级:新手上路
帖 子:7
专家分:2
注 册:2015-4-13
收藏
得分:0 
if 判断 和 for 循环还是加上大括号吧,不然看上去还是容易混淆
2016-01-20 14:02
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
回复 4楼 rjsp
这就是传说中的辗转相除吧

DO IT YOURSELF !
2016-01-20 14:06
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9008
专家分:53957
注 册:2011-1-18
收藏
得分:0 
回复 6楼 wp231957
是啊,很容易证明

假设 a大于b,a和b的最大公约数为c
那么因为 a是c的整数倍,b是c的整数倍,所以 a-数个b 还是 c 的整数倍
即 a和b的最大公约数 == a%b和b的最大公约数
2016-01-20 14:26
快速回复:求公约数
数据加载中...
 
   



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

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