SDUT 3849 分数四则运算

分数四则运算

Time Limit: 1000 ms Memory Limit: 65536 KiB

Submit Statistic

Problem Description

编写程序,实现两个分数的加减法

Input

输入包含多行数据;

每行数据是一个字符串,格式是"a/boc/d",其中a, b, c, d为数字(每个数字保证为正数并且不存在正号)。o是运算符"+"或者"-","*","\"。

数据以EOF结束,输入数据保证合法。

Output

直接输出结果,并且注意结果应符合书写习惯,没有多余的符号、分子、分母,并且化简至最简分数形式。

Sample Input

1/100+3/100
1/4-1/2
1/3-1/3
1/2*2/1
1/2\1/2

Sample Output

1/25
-1/4
0
1
1

Hint

Source

学到的主要内容:

1.字符串的分割方法:

      分割完用字符串租 存下来  String[] s = s.spilt()

     多个分割符的时候  要用单个 | 字符隔开  部分特殊字符  要用   \\   进行转义

2.将字符串转成整型

      调用方法  int num = Integer.parseInt(String)

import java.util.Scanner;

/*
    一个简陋的分数计算器
    主要目的练习面向对象
*/
public class SDUT3849 {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            String s = in.nextLine();
            // 对计算表达式进行分割 成两个 分数
            String[] s1 = s.split("\\+|\\-|\\*|\\\\");

            // 对分数的分子分母进行分割
            String[] left = s1[0].split("\\/");
            int a = Integer.parseInt(left[0]);
            int b = Integer.parseInt(left[1]);

            String[] right = s1[1].split("\\/");
            int c = Integer.parseInt(right[0]);
            int d = Integer.parseInt(right[1]);

            make test = new make(a, b, c, d);
            test.Operation(s); // 找出计算的方式(+-*/)
        }
        in.close();
    }
}

class make {
    int a, b, c, d;

    public make(int a, int b, int c, int d) { // 构造方法
        this.a = a;
        this.b = b;
        this.c = c;
        this.d = d;
    }

    public void print(int m, int n) { // 约分 并 打印计算结果
        if (m == 0)
            System.out.println(0);
        else {
            // 辗转相除法 求最大公约数
            int a = Math.abs(m);
            int b = Math.abs(n);
            if (a < b) {
                int t = a;
                a = b;
                b = t;
            }
            while (a % b != 0) {
                int t = a % b;
                a = b;
                b = t;
            }
            m /= b;
            n /= b;
            if (n == 1)
                System.out.println(m);
            else
                System.out.println(m + "/" + n);
        }

    }

    public void sum() { // 求和
        int m = a * d + b * c;
        int n = b * d;
        print(m, n);
    }

    public void cha() { // 求差
        int m = a * d - b * c;
        int n = b * d;
        print(m, n);
    }

    public void ji() {  // 求积
        int m = a * c;
        int n = b * d;
        print(m, n);
    }

    public void shang() { // 求商
        int m = a * d;
        int n = b * c;
        print(m, n);
    }

    // 寻找计算因子
    public void Operation(String s) {
        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) == '+') {
                sum();
                break;
            } else if (s.charAt(i) == '-') {
                cha();
                break;
            } else if (s.charAt(i) == '*') {
                ji();
                break;
            } else if (s.charAt(i) == '\\') {
                shang();
                break;
            }

        }
    }
}

/***************************************************
User name: jk180602张国辉
Result: Accepted
Take time: 148ms
Take Memory: 12536KB
Submit time: 2019-01-11 16:31:34
****************************************************/

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值