博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Problem B: 分数类的类型转换
阅读量:5260 次
发布时间:2019-06-14

本文共 1212 字,大约阅读时间需要 4 分钟。

Description

封装一个分数类Fract,用来处理分数功能和运算,支持以下操作:
1. 构造:传入两个参数n和m,表示n/m;分数在构造时立即转化成最简分数。
2. show()函数:分数输出为“a/b”或“-a/b”的形式,a、b都是无符号整数。若a为0或b为1,只输出符号和分子,不输出“/”和分母。
3. double类型转换函数:用分子除以分母,得到的小数。注意:分子为0时不要输出为“-0”
-----------------------------------------------------------------------------
你设计一个Fract类,使得main()函数能够运行并得到正确的输出。调用格式见append.cc

Input

输入多行,每行两个整数,分别为分子和分母,至EOF结束。输入的分母不会为0;

Output

每行输出一个实数和分数,与输入顺序一致。实数为分子除以分母所得。
分数输出时为最简形式,负号只会出现在最前面,若分母为1或分子为0,则只输出一个整数,即分子部分,而没有“/”和分母部分。

Sample Input

1 3 20 -15 80 150 -9 1 6 6 12 16 -33 -48 6 11 0 -10

Sample Output

0.333333 1/3 -1.33333 -4/3 0.533333 8/15 -9 -9 1 1 0.75 3/4 0.6875 11/16 0.545455 6/11 0 0

HINT

Append Code

#include<iostream>
#include<iomanip>
#include <cstdio>
using
namespace
std;

int gcd(int a,int b) //辗转相除法;大除以小

{
        return b==0?a:gcd(b,a%b);//分母为零不能继续
}

class
Fract
{
private
:
    
int
x,y;
public
:
    
Fract(
int
a,
int
b):x(a),y(b){
 
        
if
(x<0)
            
x=-x;
        
if
(y<0)
            
y=-y;
    
int
flag=gcd(max(x,y),min(x,y));
//max min,节约
    
x/=flag;
    
y/=flag;
    
if
(a<0)
        
x*=-1;
//前方显示
    
if
(b<0)
        
x*=-1;
//前方显示
 
    
}
    
void
show(){
        
if
(x==0||y==1)
                
cout<<x<<endl;
        
else
        
cout<<x<<
'/'
<<y<<endl;
    
}
    
operator
double
()
    
{
        
return
(
double
)x/y;
    
}
};

转载于:https://www.cnblogs.com/TogetherLaugh/p/6623464.html

你可能感兴趣的文章
java定时器的使用(Timer)
查看>>
boost 同步定时器
查看>>
[ROS] Chinese MOOC || Chapter-4.4 Action
查看>>
简单的数据库操作
查看>>
Redmine
查看>>
帧的最小长度 CSMA/CD
查看>>
编程算法 - 左旋转字符串 代码(C)
查看>>
IOS解析XML
查看>>
Python3多线程爬取meizitu的图片
查看>>
树状数组及其他特别简单的扩展
查看>>
zookeeper适用场景:分布式锁实现
查看>>
110104_LC-Display(液晶显示屏)
查看>>
httpd_Vhosts文件的配置
查看>>
php学习笔记
查看>>
普通求素数和线性筛素数
查看>>
PHP截取中英文混合字符
查看>>
【洛谷P1816 忠诚】线段树
查看>>
电子眼抓拍大解密
查看>>
poj 1331 Multiply
查看>>
tomcat7的数据库连接池tomcatjdbc的25个优势
查看>>