C++ 用strtok代替C++中沒有的split發揮作用
完成下列分數類的實現:
class CFraction
{
private:
int fz, fm;
public:
CFraction(int fz_val, int fm_val) ;
CFraction add(const CFraction &r);
CFraction sub(const CFraction &r);
CFraction mul(const CFraction &r);
CFraction div(const CFraction &r);
int getGCD(); // 求物件的分子和分母的最大公約數
void print();
};
求兩數a、b的最大公約數可採用輾轉相除法,又稱歐幾里得演算法,其步驟為:
- 交換a, b使a > b;
- 用a除b得到餘數r,若r=0,則b為最大公約數,退出.
- 若r不為0,則用b代替a, r代替b,此時a,b都比上一次的小,問題規模縮小了;
- 繼續第2步。
輸入
測試資料的組數 t
第一組第一個分數
第一組第二個分數
第二組第一個分數
第二組第二個分數
…
輸出
第一組兩個分數的和
第一組兩個分數的差
第一組兩個分數的積
第一組兩個分數的商
第二組兩個分數的和
第二組兩個分數的差
第二組兩個分數的積
第二組兩個分數的商
…
#include <iostream>
#include <iomanip>
#include<math.h>
#include<string.h>
using namespace::std;
class CFraction
{
private:
int fz, fm;
public:
CFraction(int fz_val, int fm_val);
CFraction add(const CFraction& r);
CFraction sub(const CFraction& r);
CFraction mul(const CFraction& r);
CFraction div(const CFraction& r);
int getGCD(); // 求物件的分子和分母的最大公約數
void print();
};
/*********************/
CFraction::CFraction(int fz_val, int fm_val) {
fz = fz_val; fm = fm_val;
}
CFraction CFraction::add(const CFraction& r) {
int a = fz, b = fm;
a = a * r.fm;
b = b * r.fm;
int rfz = r.fz, rfm = r.fm;
rfz = rfz * fm;
rfm = rfm * fm;
CFraction ddd(a + rfz, b);
return ddd;
}
CFraction CFraction::sub(const CFraction& r) {
int a = fz, b = fm;
a = a * r.fm;
b = b * r.fm;
int rfz = r.fz, rfm = r.fm;
rfz = rfz * fm;
rfm = rfm * fm;
CFraction ddd(a - rfz, b);
return ddd;
}
CFraction CFraction::mul(const CFraction& r) {
CFraction ddd(fz * r.fz, fm * r.fm);
return ddd;
}
CFraction CFraction::div(const CFraction& r) {
CFraction ddd(fz * r.fm, fm * r.fz);
return ddd;
}
int CFraction::getGCD() {
int y = 1, n = 0;
int b = fm, a = fz;
if (b < a)
{
a = a ^ b; b = a ^ b; a = a ^ b;
}
while (y != 0)
{
if (n != 0)
{
a = b, b = y;
}
y = a % b;
n = 1;
}
return b;
}
void CFraction::print() {
int a = abs(getGCD());
fz = fz / a;
fm = fm / a;
cout << fz << "/" << fm << endl;
}
/********************/
int main()
{
int t;
cin >> t;
for (int i = 0; i < t; i++)
{
char fsa[50], fsb[50];
char* p;//fm
char* ptr[2];
char* p0;//fm
char* ptr0[2];
cin >> fsa >> fsb;
ptr[0] = strtok(fsa, "/");
ptr[1] = strtok(NULL, "/");
ptr0[0] = strtok(fsb, "/");
ptr0[1] = strtok(NULL, "/");
int fzz = atoi(ptr[0]), fmm = atoi(ptr[1]), fzzz = atoi(ptr0[0]), fmmm = atoi(ptr0[1]);
CFraction fsfs(fzz, fmm);
CFraction fsfs0(fzzz, fmmm);
CFraction a = fsfs.add(fsfs0);
CFraction b = fsfs.sub(fsfs0);
CFraction c = fsfs.mul(fsfs0);
CFraction d = fsfs.div(fsfs0);
a.print(); b.print(); c.print(); d.print();
cout << endl;
}
}
相關文章
- C庫中沒有itoa以及C++中string沒有split方法的原因C++
- C++分割字串,及strtok函式使用C++字串函式
- C++中::的作用C++
- 「中國之星計劃」3年,有的發售了、有的退出了、有的乾脆沒了
- C和C++中的名字空間和作用域C++
- C++ 62個關鍵字的作用C++
- 大資料分析發揮什麼作用大資料
- 數字孿生在智慧消防中能夠發揮什麼作用?
- 智慧經營3.0在疫情控制中發揮巨大作用!
- Linux C++ 開發1 - 搭建C++開發環境LinuxC++開發環境
- 關於C++中物件與類的詳解及其作用詳解C++物件
- AI醫生到底有沒有人在用?AI在健康領域如何發揮作用AI
- 資料視覺化是如何在智慧水利中發揮作用的?視覺化
- 資料視覺化在智慧物流中發揮了什麼作用?視覺化
- 安全沙箱技術如何在企業數字化中發揮作用?
- 智慧數字經營在防疫工作中發揮重要作用!
- CRM如何讓客戶關係發揮作用
- 智慧數字經營發揮更大作用!
- 小小智慧數字經營發揮大作用!
- C++中的&和&&C++
- C++中的assertC++
- C++中檔案開頭寫的 using namespace std 有什麼作用?C++namespace
- [C++ & AdaBoost] 傻陳帶你用C++實現AdaBoostC++
- C++入門(3):C++開發環境搭建C++開發環境
- C++陣列在年曆列印中的運用C++陣列
- C++ Qt開發:SqlTableModel對映元件應用C++QTSQL元件
- C++的“虛”應用C++
- 資料視覺化在智慧社群中能夠發揮什麼作用?視覺化
- 新基建浪潮下,區塊鏈如何發揮作用?區塊鏈
- CRM如何讓客戶關係管理發揮作用?
- C++中const的用法C++
- 119 C++中的引用&C++
- C++中vector<int>& numsC++
- C++中StringPiece瞭解C++
- C++中const小結C++
- C++中const的妙用C++
- c++中的陣列C++陣列
- C++中的容器類C++