分母用Java怎么表达,用java实现分数各种演算(加减乘除,求余,求幂,求两个数中的较大值,较小值)...

用java实现分数各种运算(加减乘除,求余,求幂,求两个数中的较大值,较小值)

用java实现分数各种运算(加减乘除,求余,求幂,求两个数中的较大值,较小值)

1,要求

用户以分数形式输入,以分数形式输出,用java语言实现分数中的各种运算(加减乘除,求余,求幂,求两个数中的较大值,较小值)

2,java代码(+详细注释)

2.1 代码

package Rational;

import java.util.StringTokenizer;

/**

* @author SunKun

* 分数四则运算

*/

public class Calculator {

int numerator; // 分子

int denominator; // 分母

Calculator(){

}

Calculator(int a,int b){

if(a == 0){

numerator = 0;

denominator = 1;

}

else{

setNumeratorAndDenominator(a,b);

}

}

void setNumeratorAndDenominator(int a, int b){ // 设置分子和分母

int c = f(Math.abs(a),Math.abs(b)); // 计算最大公约数

numerator = a / c;

denominator = b / c;

if(numerator<0 && denominator<0){

numerator = - numerator;

denominator = - denominator;

}

}

int getNumerator(){

return numerator;

}

int getDenominator(){

return denominator;

}

int f(int a,int b){ // 求a和b的最大公约数

if(a < b){

int c = a;

a = b;

b = c;

}

int r = a % b;

while(r != 0){

a = b;

b = r;;

r = a % b;

}

return b;

}

Calculator add(Calculator r){ // 加法运算

int a = r.getNumerator();

int b = r.getDenominator();

int newNumerator = numerator * b + denominator * a;

int newDenominator = denominator * b;

Calculator result = new Calculator(newNumerator,newDenominator);

return result;

}

Calculator sub(Calculator r){ // 减法运算

int a = r.getNumerator();

int b = r.getDenominator();

int newNumerator = numerator * b - denominator * a;

int newDenominator = denominator * b;

Calculator result = new Calculator(newNumerator,newDenominator);

return result;

}

Calculator muti(Calculator r){ // 乘法运算

int a = r.getNumerator();

int b = r.getDenominator();

int newNumerator = numerator * a;

int newDenominator = denominator * b;

Calculator result = new Calculator(newNumerator,newDenominator);

return result;

}

Calculator div(Calculator r){ // 除法运算

int a = r.getNumerator();

int b = r.getDenominator();

int newNumerator = numerator * b;

int newDenominator = denominator * a;

Calculator result = new Calculator(newNumerator,newDenominator);

return result;

}

static Calculator qiuyu(double left,double right){ // 求余运算

double point_result = Math.IEEEremainder(left, right);

int r1 = (int)point_result;

double r2 = point_result - r1;

int newNumerator = r1*10000 + (int)(r2*10000);

int newDenominator = 10000;

Calculator result = new Calculator(newNumerator,newDenominator);

return result;

}

static Calculator pow(double left,double right){ // 求幂运算left^right

double point_result = Math.pow(left, right);

int r1 = (int)point_result;

double r2 = point_result - r1;

int newNumerator = r1*10000 + (int)(r2*10000);

int newDenominator = 10000;

Calculator result = new Calculator(newNumerator,newDenominator);

return result;

}

static Calculator max(double left,double right){ // 求两数中的较大值

double point_result = Math.min(left, right);

int r1 = (int)point_result;

double r2 = point_result - r1;

int newNumerator = r1*10000 + (int)(r2*10000);

int newDenominator = 10000;

Calculator result = new Calculator(newNumerator,newDenominator);

return result;

}

static Calculator min(double left,double right){ // 求两数中的较小值

double point_result = Math.min(left, right);

int r1 = (int)point_result;

double r2 = point_result - r1;

int newNumerator = r1*10000 + (int)(r2*10000);

int newDenominator = 10000;

Calculator result = new Calculator(newNumerator,newDenominator);

return result;

}

// 封装了具体运算,主要为对输入进行转换,对输出封装

public static void compute(String data1,String operation,String data2){

StringTokenizer fenxi = new StringTokenizer(data1,"/");

int data1_1 = Integer.parseInt(fenxi.nextToken());

int data1_2 = Integer.parseInt(fenxi.nextToken());

fenxi = new StringTokenizer(data2,"/");

int data2_1 = Integer.parseInt(fenxi.nextToken());

int data2_2 = Integer.parseInt(fenxi.nextToken());

Calculator r1 = new Calculator(data1_1,data1_2);

Calculator r2 = new Calculator(data2_1,data2_2);

Calculator result;

int a,b;

if(operation.equals("+")){ // 两数相加

result = r1.add(r2);

a = result.getNumerator();

b = result.getDenominator();

System.out.println(data1+" "+operation+" " +data2+" = " + a + "/" + b);

}

if(operation.equals("-")){ // 两数相减

result = r1.sub(r2);

a = result.getNumerator();

b = result.getDenominator();

System.out.println(data1+" "+operation+" " +data2+" = " + a + "/" + b);

}

if(operation.equals("*")){ // 两数相乘

result = r1.muti(r2);

a = result.getNumerator();

b = result.getDenominator();

System.out.println(data1+" "+operation+" " +data2+" = " + a + "/" + b);

}

if(operation.equals("/")){ // 两数相除

result = r1.div(r2);

a = result.getNumerator();

b = result.getDenominator();

System.out.println(data1+" "+operation+" " +data2+" = " + a + "/" + b);

}

if(operation.equals("%")){ // 两数求余

double left = (double)data1_1/(double)data1_2;

double right = (double)data2_1/(double)data2_2;

result = qiuyu(left,right);

a = result.getNumerator();

b = result.getDenominator();

System.out.println(data1+" "+operation+" " +data2+" = " + a + "/" + b);

}

if(operation.equals("^")){ // 两数求幂

double left = (double)data1_1/(double)data1_2;

double right = (double)data2_1/(double)data2_2;

result = pow(left,right);

a = result.getNumerator();

b = result.getDenominator();

System.out.println(data1+" "+operation+" " +data2+" = " + a + "/" + b);

}

if(operation.equals("max")){ // 两数中的较大值

double left = (double)data1_1/(double)data1_2;

double right = (double)data2_1/(double)data2_2;

result = max(left,right);

a = result.getNumerator();

b = result.getDenominator();

System.out.println(data1+" "+operation+" " +data2+" = " + a + "/" + b);

}

if(operation.equals("min")){ // 两数中的较小值

double left = (double)data1_1/(double)data1_2;

double right = (double)data2_1/(double)data2_2;

result = min(left,right);

a = result.getNumerator();

b = result.getDenominator();

System.out.println(data1+" "+operation+" " +data2+" = " + a + "/" + b);

}

}

}

package Rational;

import java.util.Scanner;

/**

* @author SunKun

* 分数各种运算的主函数

* */

public class TestCal {

public static void main(String[] args) {

// TODO Auto-generated method stub

while(true){

// 用户输入两分数和运算符

System.out.println("---------------------------------");

Scanner input = new Scanner(System.in);

System.out.println("请用户输入第一个分数(格式a/b)");

String data1 = input.next();

System.out.println("加减乘除:+-*/,求余求幂:%,^,求两数中较大值较小值max,min");

System.out.println("请用户输入要进行运算的运算符符号");

String operation = input.next();

System.out.println("请用户输入第二个分数(格式c/d)");

String data2 = input.next();

// 根据用户输入进行具体运算

Calculator cal = new Calculator();

System.out.println("运算结果为:");

cal.compute(data1, operation, data2);

}

}

}

2.2 测试代码

public class Test1{

/**

* @author SunKun

* 测试所进行的分数各种运算

*/

public static void main(String[] args) {

// 测试所用数据

double data1 = 0.25;

double data2 = 0.2;

// java自带类库

double result1 = data1 + data2; // 加

double result2 = data1 - data2; // 减

double result3 = data1 * data2; // 乘

double result4 = data1 / data2; // 除

double result5 = Math.IEEEremainder(data1, data2); // 求余

double result6 = Math.pow(data1,data2); // 求幂

double result7 = Math.max(data1, data2); // 求两数中的较大值

double result8 = Math.min(data1, data2); // 求两数中的较小值

// 输出运算结果

System.out.println(data1 + " + " + data2 + " = " + result1);

System.out.println(data1 + " - " + data2 + " = " + result2);

System.out.println(data1 + " * " + data2 + " = " + result3);

System.out.println(data1 + " / " + data2 + " = " + result4);

System.out.println(data1 + " % " + data2 + " = " + result5);

System.out.println(data1 + " ^ " + data2 + " = " + result6);

System.out.println(data1 + " max " + data2 + " = " + result7);

System.out.println(data1 + " min " + data2 + " = " + result8);

}

}

3.运算结果截图

3.1 代码

(1)

104126625.jpg

(2)

104126626.jpg

(3)

104126627.jpg

(4)

104126628.jpg

(5)

104126629.jpg

(6)

104126630.jpg

(7)

104126631.jpg

(8)

104126632.jpg

3.2测试

(9)

104126633.jpg

4.备注

扩展自自己的以前的一篇博客,链接为:http://blog.csdn.net/u010043538/article/details/12175705

如果您有好的想法或建议,欢迎留言,大家共同学习进步

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值