第十七周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语言进行编写.
随机推荐
- Sentinel-1雷达数据可以免费下载
The Sentinel-1 Scientific Data Hub(https://scihub.esa.int )网站提供免费下载 Sentinel-1雷达数据Level-0 和 Level-1级 ...
- git创建与合并分支
创建与合并分支 在版本回退里,你已经知道,每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支.截止到目前,只有一条时间线,在Git里,这个分支叫主分 支,即master分支.HEAD严格来 ...
- Unix/Linux环境C编程入门教程(20) 搭建基于Mac的 Xcode 与 QT 开发环境
1.启动 Vmware,如果没有 VMware 的同学,请看前面我们搭建 VMware 的视频 2.打开虚拟机以后,出现虚拟机界面 3 新建一个虚拟机 4 选择自定义,单击下一步 5 选择默认的 VM ...
- 函数(jquery)
<script type="text/javascript"> function makeArray(arg1, arg2){ return [ this, ar ...
- Unity 绘制多边形
最近工程需要用到一个多边形用来查看角色属性,于是就研究了下Mesh用网格做了一个.遗憾的的 UGUI 渲染不了 3D 物体,然后又用了一段时间研究了下UGUI的网格绘制. 不过终于还是完成了,虽然有些 ...
- EasyList China国内镜像
镜像地址: http://www.ikay.me/list/easylistchina.txt 与官方服务器每15分钟同步一次 本文固定链接: http://www.ikay.me/easylistc ...
- Android常用控件之GridView使用BaseAdapter
我们可以为GridView添加自定义的Adapter,首先看下用自定义Adapter的显示效果 在布局文件main.xml文件中定义一个GridView控件 <RelativeLayout xm ...
- andengine游戏引擎总结进阶篇2
本篇包括瓦片地图,物理系统, 1瓦片地图 超级玛丽,冒险岛,魂斗罗等游戏主场景都有瓦片地图画成,它的作用可见一斑,它可以用tiled Qt软件画成,在辅助篇中讲讲解tiled Qt软件的使用 1)加载 ...
- jquery动态连接节点
<1> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://w ...
- 从头开始-01.C语言环境测试
在Mac下编写C程序需要以下几步: 编写代码 a>编译:把C语言编译成0和1 b>工具:clang编译器 c>指令:cc -c 文件名.c 编译成功会生成一个. o目标文件 ...