Problem 4. 計算分數
(Time Limit: 2 second)
問題描述 :
給定兩個分數 a 及 b ,將 a +b 的結果同樣以分數呈現,且請將 a +b 的結果化為最簡分數。例如
1/2+1/3 ,你要輸出 5/6 。
輸入說明:
輸入的第一行為一個正整數
S(1≤S≤10),代表共有幾筆測資。
每筆測資包含 2 個分數 a 及 b ,以逗點隔開。每個分數都是以 x/y 的格式表示,其中
x 和 y 都是整數。
輸出說明:
對於每筆測資,請輸出 a +b 的結果,並以分數表示,且分數要化為最簡分數。
範例:
Sample
Input:
|
Sample
Output:
|
2
1/2,1/3
1/2,1/6
|
5/6
2/3
|
說明:
依題目命名變數,依範例的測資為例來解釋題目s = 2,代表共有幾筆測資,底下的程式碼是命名n
第一筆測資
a = 1/2,b = 1/3要用getline()讀取資料,然後有"/"和","的切割
會得到1 2 1 3
1,代表a的分子,以下程式碼用int_t[0]
2,代表a的分母,以下程式碼用int_t[1]
1,代表b的分子,以下程式碼用int_t[2]
3,代表b的分母,以下程式碼用int_t[3]
如下解釋
int_t[0] int_t[2]
-------- + -------- =a+b
int_t[1] int_t[3]
第一步:不管分母一不一樣,先通分
我這是先把a同乘b的分母
int_t[0]*int_t[3] int_t[2]
------------------- + -------- =a+b
int_t[1]*int_t[3] int_t[3]
再把b同乘a的分母
int_t[0]*int_t[3] int_t[2]*int_t[1]
------------------- + ------------------- =a+b
int_t[1]*int_t[3] int_t[3]*int_t[1]
假設mol和dem為相加結果的分子和分母
mol = int_t[0]*int_t[3] + int_t[2]*int_t[1] //相加結果的分子
dem = int_t[1]*int_t[3] //相加結果的分母
因為我在通分時,不是找最小公因素,所以要把分數化成最簡分數
- #include <iostream>
- #include <string>
- #include <sstream>
- using namespace std;
- int main() {
- // Problem 4. 計算分數
- int n;
- cin >> n;
- cin.ignore();
- for(int i = 0;i < n;i++)
- {
- string input;
- cin >> input;
- //字串切割
- stringstream ss(input);
- string token, tok;
- int int_t[4];
- int c = 0;
- while (getline(ss, token, '/'))
- {
- stringstream ssA(token);
- while (getline(ssA, tok, ','))
- {
- int_t[c] = stoi(tok);
- c++;
- }
- }
- c = 0;
- //int_t[0] -- 數字a的分子
- //int_t[1] -- 數字a的分母
- //int_t[2] -- 數字b的分子
- //int_t[3] -- 數字b的分母
- //int_t[0] int_t[2]
- //-------- + -------- =a+b
- //int_t[1] int_t[3]
- int mol;//分子
- int dem;//分母
- int_t[0] = int_t[0]*int_t[3];
- int_t[2] = int_t[2]*int_t[1];
- mol = int_t[0] + int_t[2];
- //cout << int_t[0] << " " << int_t[2] << endl;
- int_t[1] = int_t[3] = int_t[1]*int_t[3];
- dem = int_t[1];
- //cout << int_t[1] << " " << int_t[3] << endl;
- if(mol < dem)//分子小
- {
- for(int i = 1;i < mol;i++)
- {
- if(mol % i == 0 && dem % i == 0)
- {
- if(i != 1)
- {
- while(mol % i == 0 && dem % i == 0)
- {
- mol = mol / i;
- dem = dem / i;
- }
- }
- }
- }
- }
- else
- {
- for(int i = 1;i < dem;i++)
- {
- if(mol % i == 0 && dem % i == 0)
- {
- if(i != 1)
- {
- while(mol % i == 0 && dem % i == 0)
- {
- mol = mol / i;
- dem = dem / i;
- }
- }
- }
- }
- }
- cout << mol << "/" << dem << endl;
- }
- return 0;
- }
沒有留言:
張貼留言