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++中::的作用C++
- C++分割字串,及strtok函式使用C++字串函式
- C++中虛擬函式的作用C++函式
- C/C++中Static和Const的作用C++
- c++ 中&表達的所有的意思分別是什麼C++
- 80%以上CFO認為ERP系統沒有充分發揮作用(轉)
- C++引用的作用和用法C++
- C和C++中的名字空間和作用域C++
- 用C++設計與開發C++
- 智慧經營3.0在疫情控制中發揮巨大作用!
- 電腦怎麼解決連線到系統中的裝置沒有發揮作用的問題
- 大資料分析發揮什麼作用大資料
- AI醫生到底有沒有人在用?AI在健康領域如何發揮作用AI
- 應用系統的整合是ERP發揮作用的前提(轉)
- 智慧數字經營在防疫工作中發揮重要作用!
- 安全沙箱技術如何在企業數字化中發揮作用?
- 資料視覺化在智慧物流中發揮了什麼作用?視覺化
- 資料視覺化是如何在智慧水利中發揮作用的?視覺化
- C++ 62個關鍵字的作用C++
- c++ 類作用域中的名字查詢C++
- c++臨時變數的作用域C++變數
- 智慧數字經營發揮更大作用!
- CRM如何讓客戶關係發揮作用
- 關於C++中物件與類的詳解及其作用詳解C++物件
- 種草功能在電商app原始碼中發揮的作用和價值APP原始碼
- 幾點建議,讓Redis在你的系統中發揮更大作用Redis
- 資料視覺化在智慧社群中能夠發揮什麼作用?視覺化
- 將字串中的空格用 代替字串
- C++的虛解構函式的作用C++函式
- 新基建浪潮下,區塊鏈如何發揮作用?區塊鏈
- CRM如何讓客戶關係管理發揮作用?
- 小小智慧數字經營發揮大作用!
- 路由器組建大型網路發揮作用路由器
- C/C++中printf和C++中cout的輸出格式C++
- C++中的&和&&C++
- c++中&含義C++
- C++中clock用法C++