NPSC補完計劃

登入註冊帳號.

請輸入帳號, 密碼以及預計登入時間
進階搜尋  

最新消息:

歡迎光臨NPSC補完計劃

+ NPSC補完計劃 » NPSC國中組 » NPSC2005國中組初賽
 [C++] 2005 NPSC 國中組初賽 C. 數數字

作者 主題: [C++] 2005 NPSC 國中組初賽 C. 數數字  (閱讀 1619 次)

bleed1979

  • 初級會員
  • **
  • 文章數: 28
    • 檢視個人資料
[C++] 2005 NPSC 國中組初賽 C. 數數字
« 於: 三月 02, 2010, 02:00:09 pm »

本題同ZeroJudge高中部網站的b097。

這題的關鍵在於兩個數的最小公倍數。
最小公倍數 = 兩數乘積除以最大公因數。基本上最大公因數的寫法有很多種。為了縮減code,我採用遞迴的方式,僅供參考。

代碼: [選擇]
#include <iostream>
using namespace std;

inline unsigned int GCD(unsigned int x, unsigned int y)
{
  return(!y ? x : GCD(y, x % y));
}

int main(void)
{
  cout << flush;
  ostream *old_tie = cin.tie();
  cin.tie(0);
  ios::sync_with_stdio(false);
  int cases;
  cin >> cases;
  while (cases--)
  {
    unsigned int x, y;
    cin >> x >> y;
    cout << x * y / GCD(x, y) << "\n";
  }
  ios::sync_with_stdio(true);
  cin.tie(old_tie);
  cout << flush;
  return(0);
}

記錄

abs2000

  • 新手
  • *
  • 文章數: 3
    • 檢視個人資料
Re: [C++] 2005 NPSC 國中組初賽 C. 數數字
« 回覆 #1 於: 六月 07, 2013, 09:47:56 am »

我有點看不太懂
我的代碼:
代碼: [選擇]
#include<stdio.h>
#include<stdlib.h>
#include <iostream>
using namespace std;
int main()
{
    int a,b,temp=0,T;   
    while(cin>>T) {
    while(T--)
    {
                scanf("%d%d",&a,&b);
    int aa=a,bb=b,GCD,LCM;
        while(a%b!=0)
        {
            temp=a;
            a=b;
            b=temp%b;
        }
        GCD=b;
        LCM=GCD*(aa/GCD)*(bb/GCD);
        printf("%d\n",LCM);
    }
}
}
記錄
+ NPSC補完計劃 » NPSC國中組 » NPSC2005國中組初賽
 [C++] 2005 NPSC 國中組初賽 C. 數數字