切換
舊版
前往
大廳
主題

【C++】輾轉相除法求最大公因數,最小公倍數。

鍋貼企鵝 | 2011-05-16 22:45:30 | 巴幣 4 | 人氣 17206

基本上應該是沒有BUG,之前寫的時候,還出現過分母為零,導致程式嚴重錯誤的BUG。
修復了很久,終於完成,應該是沒有BUG了(吧)。





#include<iostream>

using namespace std;

int main()
{
    int a,b,c,d=1,f,g,k,x,y;

    cout << "Enter two number : "<<endl;
    cin >> a >> b;

    c=a;
    d=b;

    if( a <= b )
    {
        k=a;
        a=b;
        b=k;
    }
     if( a%b == 0 )
     {
         cout << "gcd = " << b <<endl;
         cout << "lcm = " << a <<endl;
     }
     
     else
     {
     do
     {
                      
                      f = a%b;
                      if(f==0)
                      {
                      a=f;
                      break;
                      }
                      else
                      {
                      g = b%f;                      
                      a =f;
                      b =g;
                      }
     }while(a!=0&&b!=0);
     if(a!=0)
     {
             cout << "gcd = " <<a<<endl;
             x = c/a;
             y = d/a;
             cout << "lcm = " <<x*y*a<<endl;
     }
     if(b!=0)
     {
             cout << "gcd = " <<b<<endl;
             x = c/b;
             y = d/b;
             cout << "lcm = " <<x*y*b<<endl;
     }
     }
     system("pause");
     return 0;
}


載點:gcd lcm.exe




2012/12/9

功力更強的現在,少花了許多行(從63到35)就寫出來,其實還能用遞迴來縮短只是效率很差就算了。

#include<iostream>

using namespace std;

int gcd(int a,int b);

int main()
{
    int i,j;
    cout << "input two numbers"<<endl;
    cin >> i >> j;
    cout << gcd(i,j)<<endl;
    system("pause");
    return 0;
}

int gcd(int a,int b)
{
    while(a!=0)
    {
            if(b>a)                            //if b < a  ,cahnge a,b
            {
                  int temp;
                  temp = a;
                  a = b;
                  b = temp;
            }
                    a = a%b;
    }  
            return b;
}
    

希望以後可以再更強。




2013/8/4

嘗試用遞迴寫作,果然很短。

int gcd(int a,int b)
{
    if(b==0)
            return a;
     return gcd(b,a%b);
}




創作回應

OwO~♩♫
這個我會算!!!!!
我會輾轉相除法!!!!((跩屁
2011-05-22 23:29:24
kaotoby
ACM標準的GCD
int gcd(int a, int b) {
return b == 0? a: gcd(b, a % b);
}
2014-08-12 14:58:43
鍋貼企鵝
哈,我沒比過 ACM ,不過這個確實很讚。 XD
2014-08-12 17:54:52

更多創作