码迷,mamicode.com
首页 > 其他好文 > 详细

Day10_23

时间:2014-10-23 19:05:49      阅读:109      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   os   ar   java   for   sp   

  1 package com.lovo;
  2 
  3 /**
  4  * 分数类
  5  * @author 叶鹏
  6  *
  7  */
  8 public class Rational {
  9     private int num;        // 分子
 10     private int den;        // 分母
 11     
 12     /**
 13      * 构造器
 14      * @param num 分子
 15      * @param den 分母
 16      */
 17     public Rational(int num, int den) {
 18         this.num = num;
 19         this.den = den;
 20         normalize();
 21     }
 22     
 23     /**
 24      * 构造器
 25      * @param str 代表一个分数的字符串
 26      */
 27     public Rational(String str) {
 28         String s1 = str.split("/")[0];    // 分子的字符串
 29         String s2 = str.split("/")[1];    // 分母的字符串
 30         this.num = Integer.parseInt(s1);
 31         this.den = Integer.parseInt(s2);
 32         normalize();
 33     }
 34     
 35     /**
 36      * 构造器
 37      * @param x 一个小数
 38      */
 39     public Rational(double x) {
 40         this.num = (int) (x * 10000);
 41         this.den = 10000;
 42         simplify();
 43         normalize();
 44     }
 45     
 46     /**
 47      * public   Rational add(Rational other) { ... }
 48      * 访问修饰符  返回类型     方法名(参数列表)       { ... }
 49      * 加法
 50      * @param other 另一个分数
 51      * @return 两个分数相加的结果
 52      */
 53     public Rational add(Rational other) {
 54         return new Rational(this.num * other.den + this.den * other.num, this.den * other.den).normalize();
 55     }
 56     
 57     /**
 58      * 减法
 59      * @param other 另一个分数
 60      * @return 两个分数相减的结果
 61      */
 62     public Rational sub(Rational other) {
 63         return new Rational(this.num * other.den - this.den * other.num, this.den * other.den).normalize();
 64     }
 65     
 66     /**
 67      * 乘法
 68      * @param other 另一个分数
 69      * @return 两个分数相乘的结果
 70      */
 71     public Rational mul(Rational other) {
 72         return new Rational(this.num * other.num, this.den * other.den).normalize();
 73     }
 74     
 75     /**
 76      * 除法
 77      * @param other 另一个分数
 78      * @return 两个分数相除的结果
 79      */
 80     public Rational div(Rational other) {
 81         return new Rational(this.num * other.den, this.den * other.num).normalize();
 82     }
 83     
 84     /**
 85      * 化简
 86      * @return 化简后的分数对象
 87      */
 88     public Rational simplify() {
 89         if(num != 0) {
 90             int divisor = gcd(Math.abs(num), Math.abs(den));
 91             num /= divisor;
 92             den /= divisor;
 93         }
 94         return this;
 95     }
 96     
 97     /**
 98      * 正规化
 99      * @return 正规化以后的分数对象
100      */
101     public Rational normalize() {
102         if(this.num == 0) {
103             this.den = 1;
104         }
105         else if(this.den < 0) {
106             this.den = - this.den;
107             this.num = - this.num;
108         }
109         return this;
110     }
111     
112     public String toString() {
113         return num + (den != 1? ("/" + den) : "");
114     }
115     
116     private int gcd(int x, int y) {
117         if(x > y) {
118             int temp = x;
119             x = y;
120             y = temp;
121         }
122         for(int i = x; i > 1; i--) {
123             if(x % i == 0 && y % i == 0) {
124                 return i;
125             }
126         }
127         return 1;
128     }
129 }
 1 package com.lovo;
 2 
 3 import java.util.Scanner;
 4 
 5 public class Test01 {
 6 
 7     public static void main(String[] args) {        
 8         Scanner sc = new Scanner(System.in);
 9         System.out.print("r1 = ");
10         String str1 = sc.next();
11         Rational r2 = new Rational(0.3);
12         
13         Rational r1 = new Rational(str1);
14         
15         System.out.printf("%s + %s = %s\n", r1, r2, r1.add(r2).simplify());
16         System.out.printf("%s - %s = %s\n", r1, r2, r1.sub(r2).simplify());
17         System.out.printf("%s * %s = %s\n", r1, r2, r1.mul(r2).simplify());
18         System.out.printf("%s / %s = %s\n", r1, r2, r1.div(r2).simplify());
19         
20         sc.close();
21     }
22 }

 

Day10_23

标签:style   blog   color   io   os   ar   java   for   sp   

原文地址:http://www.cnblogs.com/shuangyue/p/4046528.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!