53-C++ CH08 01
生活随笔
收集整理的這篇文章主要介紹了
53-C++ CH08 01
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
http://lx.lanqiao.cn/problem.page?gpid=T407 算法訓練 C++ CH08 01 ? 時間限制:1.0s ? 內存限制:256.0MB 問題描述 已知一個有理數類Zrf_Ratio,實現如下的操作符重載形式:
friend std::ostream& operator<<(std::ostream&, const zrf_Ratio&);//輸出最簡分數
friend std::istream& operator>>(std::istream&, zrf_Ratio&);
friend bool operator==(const zrf_Ratio&, const zrf_Ratio&);
friend bool operator<(const zrf_Ratio&, const zrf_Ratio&); 測試 測試時主程序會輸入四個整數a, b, c, d,表示兩個分數a/b和c/d。要求輸出最簡分數以及兩個分數相等和大小的比較結果。 樣例輸入 1 7 26 25 樣例輸出 zrf is:1/7; ssh is:26/25
(zrf==ssh) is:0; (zrf<ssh) is:1 思路:就是補充四個重載函數,純c++內容,只需提交一下代碼: ostream& operator<<(ostream& os, const zrf_Ratio& zrf_Ratio){os << zrf_Ratio.num << "/" << zrf_Ratio.den;return os; }istream& operator>>(istream& in, zrf_Ratio& zrf_Ratio){in >> zrf_Ratio.num >> zrf_Ratio.den;return in; } bool operator==(const zrf_Ratio& z1, const zrf_Ratio& z2){if(z1.num == z2.num && z1.den == z2.den)return true;return false; } bool operator<(const zrf_Ratio& z1, const zrf_Ratio& z2){if(z1.num * z2.den < z2.num * z1.den)return true;return false; }
friend std::ostream& operator<<(std::ostream&, const zrf_Ratio&);//輸出最簡分數
friend std::istream& operator>>(std::istream&, zrf_Ratio&);
friend bool operator==(const zrf_Ratio&, const zrf_Ratio&);
friend bool operator<(const zrf_Ratio&, const zrf_Ratio&); 測試 測試時主程序會輸入四個整數a, b, c, d,表示兩個分數a/b和c/d。要求輸出最簡分數以及兩個分數相等和大小的比較結果。 樣例輸入 1 7 26 25 樣例輸出 zrf is:1/7; ssh is:26/25
(zrf==ssh) is:0; (zrf<ssh) is:1 思路:就是補充四個重載函數,純c++內容,只需提交一下代碼: ostream& operator<<(ostream& os, const zrf_Ratio& zrf_Ratio){os << zrf_Ratio.num << "/" << zrf_Ratio.den;return os; }istream& operator>>(istream& in, zrf_Ratio& zrf_Ratio){in >> zrf_Ratio.num >> zrf_Ratio.den;return in; } bool operator==(const zrf_Ratio& z1, const zrf_Ratio& z2){if(z1.num == z2.num && z1.den == z2.den)return true;return false; } bool operator<(const zrf_Ratio& z1, const zrf_Ratio& z2){if(z1.num * z2.den < z2.num * z1.den)return true;return false; }
完整的程序:
#include <iostream> #include <cassert> using namespace std; class zrf_Ratio {friend std::ostream& operator<<(std::ostream&, const zrf_Ratio&);friend std::istream& operator>>(std::istream&, zrf_Ratio&);friend bool operator==(const zrf_Ratio&, const zrf_Ratio&);friend bool operator<(const zrf_Ratio&, const zrf_Ratio&); public:zrf_Ratio(int=0,int=1);zrf_Ratio(const zrf_Ratio&);private:int num;int den;void reduce();//化為最簡分數 }; //補充函數: ostream& operator<<(ostream& os, const zrf_Ratio& zrf_Ratio){os << zrf_Ratio.num << "/" << zrf_Ratio.den;return os; }istream& operator>>(istream& in, zrf_Ratio& zrf_Ratio){in >> zrf_Ratio.num >> zrf_Ratio.den;return in; } bool operator==(const zrf_Ratio& z1, const zrf_Ratio& z2){if(z1.num == z2.num && z1.den == z2.den)return true;return false; } bool operator<(const zrf_Ratio& z1, const zrf_Ratio& z2){if(z1.num * z2.den < z2.num * z1.den)return true;return false; } //公有成員函數: zrf_Ratio::zrf_Ratio(int num, int den) : num(num), den(den) {reduce(); }zrf_Ratio::zrf_Ratio(const zrf_Ratio& r) : num(r.num), den(r.den) {}//私有成員函數: void swap(int &m, int &n) { int t; t=m; m=n; n=t; }int zrf_Gcd(int m, int n) {if (m<n)swap(m,n);assert(n>=0);while (n>0) {int r=m%n; m = n; n = r;}return m; }void zrf_Ratio::reduce() {if (num == 0 || den == 0) {num = 0; den = 1; return; }if (den < 0){den *= -1; num *= -1;}if (num == 1)return;int sgn = (num<0?-1:1);int g = zrf_Gcd(sgn*num,den);num /= g; den /= g; }int main() {int a = 0, b = 0, c = 0, d = 0;cin >> a >> b >> c >> d;zrf_Ratio zrf(a, b),ssh(c, d);std::cout<<"zrf is:"<<zrf<<"; ssh is:"<<ssh<<'\n' ;std::cout<<"(zrf==ssh) is:"<<(zrf==ssh)<<"; (zrf<ssh) is:"<<(zrf<ssh) <<endl;return 0;}
轉載于:https://www.cnblogs.com/zhumengdexiaobai/p/8457832.html
總結
以上是生活随笔為你收集整理的53-C++ CH08 01的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VMware仅主机模式访问外网
- 下一篇: adb常用操作命令