C++(gcd)的應用2。


還是gcd.

從洛谷上看到的1482題。

題目描述

現代數學的著名證明之一是Georg Cantor證明了有理數是可枚舉的。他是用下面這一張表來證明這一命題的:

1/1 1/2 1/3 1/4 1/5 …

2/1 2/2 2/3 2/4 …

3/1 3/2 3/3 …

4/1 4/2 …

5/1 …

… 這次與NOIp1999第一題不同的是:這次需輸入兩個分數(不一定是最簡分數),算出這兩個分數的積(注意該約分的要約分)后輸出積在原表的第幾列第幾行(若積是整數或1/積,則以“積/1”或“1/積”結算)。

輸入輸出格式

輸入格式:

共兩行。每行輸入一個分數(不一定是最簡分數)。

輸出格式:

兩個整數,表示輸入的兩個分數的積在表中的第幾列第幾行,注意該約分的要約分。

輸入輸出樣例

輸入樣例#1: 復制
4/5
5/4
輸出樣例#1: 復制
1 1
解題思路:
觀察給出的表格可以得知最后的結果,為輸入兩個數的最簡數。
所以把兩個數相乘再用gcd算出最簡數。 代碼如下

#include <iostream>
using namespace std;
int gcd(int a,int b)
{
     return !b?a:gcd(b,a%b);//本代碼的核心,gcd約分代碼

}
int main()
{
    int j,k,i,c;
    char m;//用char型變量,將m賦為一個字符即可將m轉變為“/”除號。
    cin>>j>>m>>k;
    cin>>i>>m>>c;
    cout<<k*c/gcd(i*j,k*c)<<" "<<j*i/gcd(i*j,k*c);//將兩個分數相乘在用gcd進行約分。
    return 0;
}

蒟蒻代碼,還請大佬多多指教


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM