還是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;
}
蒟蒻代碼,還請大佬多多指教