| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 517 人关注过本帖, 1 人收藏
标题:最大公约数,求该错?
只看楼主 加入收藏
yuanye2416
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2012-9-27
结帖率:92.31%
收藏(1)
已结贴  问题点数:3 回复次数:8 
最大公约数,求该错?
#include <stdio.h>
int yushu;
int Cdiv (int m,int n)
{
    int m1,n1;
    if (m > 0 && n > 0)
    {
        m1=m;
        n1=n;
        yushu=m % n;   
        while (yushu!=0)
        {
            m1=n;
            n1=yushu;
            yushu=m1 % n1;
            
        }
   
    }
    else printf ("erro!");
    return yushu;
}
int main (void)
{
    int a,b;
    printf ("请输入两个自然数: ");
    scanf ("%d %d",&a,&b);
    Cdiv (a,b);
    printf ("m = %d ,n = %d\n",a,b);
    printf ("m和n的最大公约数为:%d",yushu);
    return 0;
}
使用int Cdiv (int m,int n)函数,非低归,不用指针


[ 本帖最后由 yuanye2416 于 2012-11-19 10:20 编辑 ]
搜索更多相关主题的帖子: include return 自然数 
2012-11-19 09:58
青春无限
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江苏
等 级:贵宾
威 望:24
帖 子:3452
专家分:19340
注 册:2012-3-31
收藏
得分:0 
看看

学 会看代码…学习写程序…学会搞开发…我的目标!呵呵是不是说大话啊!!一切皆可能
2012-11-19 10:08
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:1 
Cdiv 这个函数写的有问题吧

DO IT YOURSELF !
2012-11-19 10:26
yuanye2416
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2012-9-27
收藏
得分:0 
回复 3楼 wp231957
知道已经修改了,可以,哪个调用结过还是0,怎么解决
2012-11-19 10:27
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:2 
我写了一个
肯定不是最优化的 ,将就着看看吧
程序代码:
#include <stdio.h>

int Cdiv (int m,int n)
{
    if(m<1 || n<1) return 0;
    int tmp=1;
    if(m<n){tmp=m;m=n;n=tmp;}  //强行令m>n
    for(int i=1;i<=n;i++)
    {
        if((m%i==0)&&(n%i==0)) tmp=i;
    }
    return tmp;
}
int main (void)
{
    int a,b;
    printf ("请输入两个自然数: ");
    scanf ("%d %d",&a,&b);
    int tmp=Cdiv(a,b);
    if(tmp==0)
    {
        printf("输入数据有问题");
        return 0;
    }
    printf ("m = %d ,n = %d\n",a,b);
    printf ("m和n的最大公约数为:%d",tmp);
    return 0;
}



DO IT YOURSELF !
2012-11-19 10:56
jk_love
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:196
专家分:965
注 册:2012-10-22
收藏
得分:0 
scanf格式与后面不一致,main()中yushu是干什么的?要打印也是上面函数的返回值才正确
2012-11-19 11:19
lwb603569640
Rank: 6Rank: 6
等 级:侠之大者
威 望:2
帖 子:283
专家分:436
注 册:2012-11-9
收藏
得分:0 
程序代码:
#include <stdio.h>

//将输入的分数化为最简方式

void
reduce(int num, int den,
       int *reduced_num,
       int *reduced_den)
{
    int gcd, r;

    *reduced_num=num;
    *reduced_den=den;

    while(num!=0){
        r=den%num;
        den=num;
        num=r;
    }
    gcd=den;

    *reduced_num /=gcd;
    *reduced_den /=gcd;
}


int main()
{
    int num, den, reduced_num, reduced_den;

    printf("请输入一个分数(xx/xx): ");
    scanf("%d/%d", &num, &den);

    reduce(num, den, &reduced_num, &reduced_den);

    printf("分数最简方式为: %d/%d", reduced_num, reduced_den);

    return 0;
}


用了指针的版本

自由、民主、宪政!
2012-11-19 11:25
lwb603569640
Rank: 6Rank: 6
等 级:侠之大者
威 望:2
帖 子:283
专家分:436
注 册:2012-11-9
收藏
得分:0 
程序代码:
#include <stdio.h>
//编程可以对两个分数进行加减乘除运算。
int main()
{
    char ch;
    int m, n, m1, n1, rm, rn, gcd, r;

    printf("输入算术运算的两个分数(m/n+m/n): ");
    scanf("%d/%d%c%d/%d", &m, &n, &ch, &m1, &n1);

    switch(ch){
        case '+':
            rm=m*n1+m1*n;
            rn=n1*n;
            break;
        case '-':
            rm=m*n1-m1*n;
            rn=n1*n;
            break;
        case '*':
            rm=m*m1;
            rn=n*n1;
            break;
        case '/':
            rm=m*n1;
            rn=n*m1;
            break;
        default: printf("ERROR"); return 0;
    }

    m=rm,n=rn;

    while(n!=0){
        r=m%n;
        m=n;
        n=r;
    }
    gcd=m;

    if(rm/gcd==rn/gcd)
        printf("计算结果: %d", rm/gcd);
    else
        printf("计算结果: %d/%d", rm/gcd, rn/gcd);

    return 0;
}


另一个版本

自由、民主、宪政!
2012-11-19 11:26
yumingde45
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2012-10-22
收藏
得分:0 
我把2楼的方法改进了点....
程序代码:
int Cdiv (int m,int n)
{
    if(m<1 || n<1) return 0;
    int tmp=1;
    if(m<n){tmp=m;m=n;n=tmp;}  //强行令m>n

    if(m%n==0) return n;    //先判断n是否为最大公约数
    else{
    for(int i=1;i<n/2;i++)   //如果n不是最大公约数,大于n/2的数中一定找不到!这样大大减少时间复杂度(特别是两个数很大的时候)
    {
        if((m%i==0)&&(n%i==0)) tmp=i;
    }
    return tmp;
    }
}
2012-11-19 13:48
快速回复:最大公约数,求该错?
数据加载中...
 
   



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

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