标题:马上求解······c++题目
只看楼主
独步天涯
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2011-4-18
结帖率:0
已结贴  问题点数:20 回复次数:4 
马上求解······c++题目
求两个正整数的最大公约数和最小公倍数
搜索更多相关主题的帖子: 公倍数 公约数 正整数 
2011-04-18 21:16
buffer
Rank: 5Rank: 5
等 级:职业侠客
帖 子:73
专家分:326
注 册:2010-12-31
得分:5 
欧几里德算法
程序代码:
int gcd(int a, int b)
{
    return b? gcd(b,a%b):a;
}
int lcm(int a, int b)
{
    return a*(b/gcd(a,b));
}
2011-04-18 21:57
ucyan
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:61
专家分:198
注 册:2011-4-12
得分:5 
程序代码:
#include <iostream>
using namespace std;
int hcf (int a, int b)
{
    int r, t;
    if (a < b)
    {
        t = a; a = b; b = t;
    }
    r = b % a;
    while (r != 0)
    {
        b = a;
        a = r;
        r = b % a;
    }
    return a;
}

int lcf (int a, int b)
{
    return a * (b / hcf(a,b));
}

int main()
{
    int x, y;
    cout<< "输入两个整数:" <<endl;
    cin>> x >> y;
    cout<< "最大公约数:" << hcf(x,y) << " 最小公倍数:" << lcf(x,y) <<endl;
    return 0;
}
相对简单的~~
2011-04-18 23:17
Lyone
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:99
专家分:195
注 册:2010-12-7
得分:5 
程序代码:
int Lcm(int *pn, int amount)//最小公倍数,*pn是数组,amount是数组的长度
{
    int MaxData = pn[0];
    int LimitI = pn[0];
    for (int i=1;i<amount;i++)
    {
        LimitI *= pn[i];
        if (MaxData<pn[i])
            MaxData=pn[i];
    }
    int j;
    for (i=MaxData;i<LimitI;i++)
    {
        for (j=0;j<amount;j++)
        {
            if (i%pn[j]!=0)
                break;
        }
        if (j==amount)
            break;
    }
    return i;
}


int Gcd(int *pn, int amount)//最大公约数,*pn是数组地址,amount是数组长度
{
    int MinData = *pn;
    for (int i=1;i<amount;i++)
    {
        if (MinData>pn[i])
            MinData = pn[i];
    }
    int j;
    for (i=MinData;i>0;i--)
    {
        for (j=0;j<amount;j++)
        {
            if (pn[j]%i!=0)
                break;
        }
        if (j==amount)
            break;
    }
    return i;
}
前段时间正好要用到这两个数,不过我这个不是单求两个整数,而是可以求一个数组的最大公约数,最小公倍数。
PS:学习了楼上两位的方法,谢谢。
2011-04-19 10:56
linw1225
Rank: 3Rank: 3
来 自:福建
等 级:论坛游侠
帖 子:110
专家分:145
注 册:2011-4-7
得分:5 
回复 楼主 独步天涯
#include<iostream>

using namespace std;

int main()
{
    int gongyue( int a, int b);
    void gongbei(int d, int e,int f);

    int m,n;
    int i;

    cout<<"please input two numbers:";
    cin>>m>>n;

    i=gongyue(m,n);
    gongbei(m,n,i);

    return 0;
}


int gongyue( int a, int b)
{
    int temp,a1,b1;

    a1=a;
    b1=b;
    temp=a;

    if(a<b)
    {
        a=b;
        b=temp;
    }

    while(b!=0)
    {
        temp=b;
        b=a%b;
        a=temp;
    }

    cout<<a1<<"和"<<b1<<"最大公约数是:"<<a<<endl;

    return a;
}

void gongbei(int d, int e,int f)
{
    long int j;

    j=d/f*e;

    cout<<d<<"和"<<e<<"的最小公倍数是:"<<j<<endl;
}

Einmal ist keinmal
2011-04-19 22:03



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-337144-1-1.html




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

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