Skip to content

luice/fraction

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 

Repository files navigation

fraction

分子分母均为64位整数的分数库

fraction.h


说明:
    0、这是我实现的一个分数库,分子和分母用 64 位整数表示。
    1、这个头文件中所有的函数和类型都在命名空间 luice_fraction 下。
    2、分数类名为 fraction,64 位整数声明为 int64。
   *3、由于不同平台对 64 位整数的表示方式有不同,使用时修改类型 int64 的声明。
    4、构造函数有两种:一种是两个参数,依次为分子、分母;一种是一个参数,相当于分母为 1.
    5、为了保证效率,作了以下设计:
        5.1、忽略了一切检查,详见 6.5,7.3
        5.2、将分子(numerator)、分母(denominator)两个成员变量声明为 public
       *5.3、检查有效性的工作由用户完成,这样做是为了效率更高,也是与 C 语言的设计初衷保持一致。
       *5.4、如果用户直接修改了成员变量,建议修改之后调用 regularize() 函数。详见 7.
    6、重载了以下算术运算符:
    +-------+-----------+---------------+-----------------------+---------------
    |   op  |   return  |   pre / post  |   operand             |   说明
    +-------+-----------+---------------+-----------------------+---------------
    |   -   |   new     |   post        |   NONE                |   求相反数
    |   ~   |   new     |   post        |   NONE                |   求倒数
    |   +=  |   this    |   post        |   fraction / int64    |   加法
    |   +   |   new     |   pre / post  |   fraction / int64    |   加法
    |   -=  |   this    |   post        |   fraction / int64    |   减法
    |   -   |   new     |   pre / post  |   fraction / int64    |   减法
    |   *=  |   this    |   post        |   fraction / int64    |   乘法
    |   *   |   new     |   pre / post  |   fraction / int64    |   乘法
    |   /=  |   this    |   post        |   fraction / int64    |   除法
    |   /   |   new     |   pre / post  |   fraction / int64    |   除法
    |   <   |   bool    |   pre / post  |   fraction / int64    |   比较,小于
    |   <=  |   bool    |   pre / post  |   fraction / int64    |   比较,小于等于
    |   ==  |   bool    |   pre / post  |   fraction / int64    |   比较,等于
    |   >=  |   bool    |   pre / post  |   fraction / int64    |   比较,大于等于
    |   >   |   bool    |   pre / post  |   fraction / int64    |   比较,大于
    |   !=  |   bool    |   pre / post  |   fraction / int64    |   比较,不等于
    +-------+-----------+---------------+-----------------------+---------------
    【注】
        6.1、new 表示返回的是一个新值,this 值不会发生变化;
            this 表示返回的是 this,this 值会被更新。
           *如果返回的是 new 值,则这个返回值不是左值。
        6.2、pre 表示运算符前置,post 表示符后置,与通常的使用习惯相同。
        6.3、operand 表示另一个参与运算的值的类型。
       *6.4、由于定义了 faction(int64) 构造函数,会发生自动类型转换:
            表达式中只要有一个 fraction 类型值,则结果一定为 fraction 类型。
            这与基本类型的使用习惯一致。
       *6.5、任何时候都不检查分母是否为 0,不检查除数是否为 0.
    7、实现了约分功能,函数 regularize() 会将此函数转化为“标准形式”:
        7.1、分母化为非负,整个分数的符号用分子的符号表示
        7.2、约分为最简分数
       *7.3、 regularize() 函数不检查分母是否为 0!
    8、重载了 >> 和 << 运算符,用于流输入输出。
        8.1、输入输出格式为:<分子>/<分母> 或 <分子>,如:2/5 或 -129
        8.2、输出不带空格
        8.3、输出时,如果分母为负(这是非标准形式,但是对这提供支持)
            则输出形如 5/(-2);
            如果分母为 1,岀只输出分子。
            分子不论是否为负,都不再添加任何括号。
        8.4、输入空格有无均可
            输入时,程序会自动判断是两种合法格式中的哪一种,判断标准是:
                8.4.1、如果有斜杠且斜杠后面是整数,则认为是 <分子>/<分母>
                8.4.2、如果没有斜杠,或者有斜杠但是斜杠后面不是整数,则认为是 <分子>
           *输入时,不管分母是正是负,都不要加括号!例如:应输入 2/-5 而不是 2/(-5)
        8.4、如果输入的分子部分不是整数,则认为输入非法。
            与读取基本类型一样,输入非法时,会导致输入流的状态位发生变化,
            除非用户清理状态位,否则之后所有的输入过程都会失败。
   *9、由于所有成员变量都是基本类型,所以没有重写拷贝构造与析构函数。
        在使用时对其有扩充,请根据实现需要补写这两个函数。
    10、此命名空间下还有三个小函数,swap, topos, gcd,用户也可以按需求使用。

About

分子分母均为64位整数的分数库

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages