第十七周oj刷题——Problem B: 分数类的四则运算【C++】
Description
Input
Output
Sample Input
1 2 -1 2
4 3 3 4
0 0 0 0
Sample Output
1 -1
7/12 16/9
(1)普通版。
/* All rights reserved.
* 文件名:test.cpp
* 作者:陈丹妮
* 完毕日期:2015年 7 月 2 日
* 版 本 号:v1.0
*/
#include <iostream>
using namespace std;
class Fraction
{
private:
int x;
int y;
public:
Fraction(int a=0,int b=1):x(a),y(b) {}
friend istream& operator>>(istream& input,Fraction &f);
bool operator ==(int a);
void output();
Fraction operator -(Fraction &f1);
Fraction operator /(Fraction &f1);
};
istream& operator>>(istream& input,Fraction &f)
{
input>>f.x>>f.y;
return input;
}
bool Fraction::operator==(int a)
{
if(x==a)
return true;
else
return false;
}
Fraction Fraction::operator -(Fraction &f1)
{
Fraction f;
f.x=x*f1.y-f1.x*y;
f.y=y*f1.y;
return f;
}
Fraction Fraction::operator /(Fraction &f1)
{
Fraction f;
if(!f1.x) return *this;
f.x=x*f1.y;
f.y=y*f1.x;
return f;
}
void Fraction::output()
{
int r,m=x,n=y,t;
if(m<n)
{
t=n;
n=m;
n=t;
}
while(n!=0)
{
r=m%n;
m=n;
n=r;
}
if(y==m)
cout<<x/m;
else if(x/m<0&&y/m<0)
cout<<(-1)*x/m<<'/'<<(-1)*y/m;
else if(y/m<0)
cout<<-x/m<<'/'<<-y/m;
else
cout<<x/m<<'/'<<y/m;
} int main()
{
Fraction f1,f2,f3;
while(cin>>f1>>f2)
{
if(f1==0&&f2==0)
break;
f3=f1-f2;
f3.output();
cout<<" ";
f3=f1/f2;
f3.output();
cout<<endl;
}
return 0;
}
(2)函数版
#include <iostream> using namespace std;
int gcd(int d,int n);
class Fraction
{
private:
double deno; //分母
double nume;//分子
public:
Fraction();
Fraction operator-(Fraction &f);
Fraction operator/(Fraction &f);
friend istream & operator>>(istream &input,Fraction &f);
bool operator==(int c);
void output();
void simplify();
};
void Fraction::output()
{
if(nume/deno==int(nume/deno))
cout<<nume/deno;
else
{
if(nume>0&&deno<0)
{
nume=-nume;
deno=-deno;
}
else
{
nume=nume;
deno=deno;
}
cout<<nume<<"/"<<deno;
} }
bool Fraction::operator==(int c)
{
if(nume==0&&c==0)
return true;
else return false;
} istream & operator>>(istream &input,Fraction &f)
{
input>>f.nume>>f.deno;
return input;
}
void Fraction::simplify()
{
int n=gcd(deno, nume);
deno/=n; // 化简
nume/=n;
}
Fraction::Fraction()
{
deno=0;
nume=1;
}
Fraction Fraction:: operator-(Fraction &c)
{
Fraction t;
t.nume=nume*c.deno-c.nume*deno;
t.deno=deno*c.deno;
t.simplify();
return t;
}
Fraction Fraction:: operator/(Fraction &c)
{
Fraction t;
if (!c.nume) return *this; //除法无效时,这样的情况须要考虑。但这样的处理仍不算合理
t.nume=nume*c.deno;
t.deno=deno*c.nume;
t.simplify();
return t;
}
int gcd(int m, int n) //这个函数能够定义为类的成员函数,也能够为一般函数
{
int r;
if (m==0)
{
return n;
}
while(r=m%n) // 求m,n的最大公约数
{
m=n;
n=r;
}
return n;
}
int main() { Fraction f1,f2,f3; while(cin>>f1>>f2) { if(f1==0&&f2==0) break; f3=f1-f2; f3.output();
cout<<' ';
f3=f1/f2; f3.output(); cout<<endl; } return 0; }
/* All rights reserved.
* 文件名:test.cpp
* 作者:陈丹妮
* 完毕日期:2015年 7 月 2 日
* 版 本 号:v1.0
*/
#include <iostream>
using namespace std;
class Fraction
{
private:
int x;
int y;
int e;
public:
Fraction(int a=0,int b=1):x(a),y(b)
{
e=0;
}
friend istream& operator>>(istream& input,Fraction &f);
bool operator ==(int a);
void output();
Fraction operator -(Fraction &f1);
Fraction operator /(Fraction &f1);
};
istream& operator>>(istream& input,Fraction &f)
{
input>>f.x>>f.y;
return input;
}
bool Fraction::operator==(int a)
{
if(x==a)
return true;
else
return false;
}
Fraction Fraction::operator -(Fraction &f1)
{
Fraction f;
f.x=x*f1.y-f1.x*y;
f.y=y*f1.y; return f; }
Fraction Fraction::operator /(Fraction &f1)
{
Fraction f;
if (!f1.x) return *this;
f.x=x*f1.y;
f.y=y*f1.x;
return f;
}
void Fraction::output()
{
int r,m=x,n=y,t;
if(m<n)
{
t=n;
n=m;
n=t;
}
while(n!=0)
{
r=m%n;
m=n;
n=r;
}
if(y==m)
cout<<x/m;
else if(x/m<0&&y/m<0)
cout<<-x/m<<'/'<<-y/m;
else if(y/m<0)
cout<<-x/m<<'/'<<-y/m;
else
cout<<x/m<<'/'<<y/m;
if(e==0)
cout<<" ";
e++;
} int main()
{
Fraction f1,f2,f3;
while(cin>>f1>>f2)
{
if(f1==0&&f2==0)
break;
f3=f1-f2;
f3.output();
f3=f1/f2;
f3.output();
cout<<endl;
}
return 0;
}
学习心得:这道题提交了非常多次。原来就是由于没有考虑分子为0的情况,导致错误。前两个都AC对了,最后一个没有AC可是,编译时都是对的,就是不知道格式是哪里出错了。希望有人能帮我指出来,谢谢,继续努力吧!!
!
第十七周oj刷题——Problem B: 分数类的四则运算【C++】的更多相关文章
- 第十六周oj刷题——Problem I: 改错题:类中私有成员的訪问
Description 改错题: 设计一个日期类和时间类,并编写全局函数display用于显示日期和时间. 要求:display函数作为类外的普通函数,而不是成员函数 在主函数中调用display函数 ...
- 第十六周oj刷题——Problem E: B 构造函数和析构函数
Description 在建立类对象时系统自己主动该类的构造函数完毕对象的初始化工作, 当类对象生命周期结束时,系统在释放对象空间之前自己主动调用析构函数. 此题要求: 依据主程序(main函数)和程 ...
- 第十六周oj刷题——Problem J: 填空题:静态成员---计算学生个数
Description 学生类声明已经给出.在主程序中依据输入信息输出实际建立的学生对象个数,以及全部学生对象的成绩总和. Input 学生个数 相应学生个数的学生信息(姓名 年龄 成绩) ...
- 第十五周oj刷题——Problem M: C++习题 矩阵求和--重载运算符
Description 有两个矩阵a和b,均为2行3列.求两个矩阵之和.重载运算符"+",使之能用于矩阵相加(如c=a+b). 重载流插入运算符"<<&quo ...
- Sublime Text3 配置C++(附oj刷题常用模板)
# 下载对应平台的sublime sublime最新版下载, 字体样式个人喜欢Consolas, 另附注册码: -– BEGIN LICENSE -– TwitterInc 200 User Lice ...
- Problem E: 分数类的输出
Problem E: 分数类的输出 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 2699 Solved: 1227[Submit][Status][ ...
- Leetcode OJ 刷题
Valid Palindrome吐槽一下Leetcode上各种不定义标准的输入输出(只是面试时起码能够问一下输入输出格式...),此篇文章不是详细的题解,是自己刷LeetCode的一个笔记吧,尽管没有 ...
- 小米OJ刷题日志
虽然这OJ上的题比较水,但还是挺有意思的.关键是能赚钱 特别是提交方式 居然不支持C++,垃圾OJ 4. 最长连续数列 排序后dp 5. 找出旋转有序数列的中间值 写个排序就做完了. 6. 交叉队列 ...
- 九度OJ刷题报告
从8月初到现在,已经刷了400道题,越到后面题目越难,但仍会继续努力. 现将自己所AC的代码贴到博客上整理,同时供大家交流参考. 所有代码均为本人独立完成,全部采用C语言进行编写.
随机推荐
- Delphi 服务操作
unit Service; interface uses Windows,Messages,SysUtils,Winsvc,Dialogs; function StartServices(Const ...
- Linux内核中常见内存分配函数(一)
linux内核中采 用了一种同时适用于32位和64位系统的内存分页模型,对于32位系统来说,两级页表足够用了,而在x86_64系 统中,用到了四级页表. * 页全局目录(Page Global Dir ...
- ASP.Net连接SQLServer 连接字符串
引用命名空间 using System.Data; using System.Data.SqlClient; 连接字符串 // windows 验证方式数据库中存在单一实例 string connec ...
- Virtualbox 启动虚拟机报错以及扩展、显卡驱动安装
一.Virtualbox虚拟机启动报错,如图 预先估计是BIOS中的cpu Virtualtion虚拟化支持是disable,结果一看是enable. 接下来只好Google,找到了这么一个帖子:ht ...
- js格式化日期yyyyMMdd
先来一个土方法: <script>function getyyyyMMdd(){ var d = new Date(); var curr_date = d.getDate(); var ...
- c#导出文件,文件名中文乱码解决方法。
public string clFielName(string fileName) { System.Web.HttpContext curContext = System.Web.HttpConte ...
- 经典:十步完全理解 SQL
经典:十步完全理解 SQL 来源:伯乐在线 链接:http://blog.jobbole.com/55086/ 很多程序员视 SQL 为洪水猛兽.SQL 是一种为数不多的声明性语言,它的运行方式完 ...
- jboss清楚缓存
在服务器上部署或更新时,常常会忘记删除JBOSS的缓存.忘记删除缓存的后果,经常就是改好了代码却还是原来的错误,然后查找半天,浪费时间.所以在重新部署JBOSS,在启动JBOSS前一定要删除JBOSS ...
- centos6安装vncserver实现图形化访问
一.配置163的yum源 1.导入CentOS-6的GPG证书 #rpm --import http://mirrors.163.com/centos/RPM-GPG-KEY-CentOS-6 2.让 ...
- Eclipse 修改字体