任意输入二个自然数, 若商为整数, 则直接显示商; 否则把商分解成一个自然数和一个正的既约真分数之和才显示. 例如: 输入: 9, 3 显示: 9/3=3 输入: 8, 6 显示: 8/6=1+1/3输入8 6
输出8/6=1+1/3样例输入
9 3
样例输出
9/3=3怎样显示8/6=1+1/3?

解决方案 »

  1.   

    int i = 8/6;//此时i会等于1
    int j;
    if (8 % 6 != 0) {
       j = 8 - i * 6;
    }
    if (j == 0) {
       system.out.println("8/6="+i+"+"+j+"/"+6);
    } else {
       system.out.println("8/6="+i);
    }
      

  2.   

    不好意思反了,正确如下:
    int i = 8/6;//此时i会等于1
    int j;
    if (8 % 6 != 0) {
       j = 8 - i * 6;
    }
    if (j == 0) {
       system.out.println("8/6="+i);
    } else {
       system.out.println("8/6="+i+"+"+j+"/"+6);
    }
      

  3.   

    我做了一个,楼主参考一下:
    1 设计一个分式fraction类, 它能把两个整数整理成最简分式形式,且处理正、负号. 重写toString(),使输出分式形式。
       如:整数是3,6 输出1/2。
           整数是-2,-6,输出1/3。
           整数是2,-6,输出-1/3。(不是1/-3)。
    2 设计控制台输入2个整数,分子a, 分母b, 分3重情况输出。
      1) a绝对值>=b绝对值且a%b==0. 直接输出。
      2) a绝对值<b绝对值,直接输出 new Fraction(a,b);
      3)  输出a/b+new Fraction(a%b,b).
      

  4.   


    import java.util.Scanner;
    public class IntAndFraction
    {
    public static void main(String[] args)
    {
    Scanner sc=new Scanner(System.in);
    int a=sc.nextInt();
    int b=sc.nextInt();
    boolean sign=((a>0&&b<00)||(a<0&&b>0))?true:false;
    if(Math.abs(a)>=Math.abs(b)&&a%b==0)
    {
    System.out.println(""+a+"/"+b+"="+(a/b));
    }
    else if(Math.abs(a)<Math.abs(b))
    {
    System.out.println(""+a+"/"+b+"="+(new Fraction(a,b)));
    }
    else
    {
    System.out.println(""+a+"/"+b+"="+(a/b)+(sign?"":"+")+(new Fraction(a%b,b)));
    }
    }
    }class Fraction
    {
    private int c;
    private int d; public Fraction() //默认构造函数,分子分母都为1。
    {
    c=1;
    d=1;
    }
    public Fraction(int a,int b) //带参数构造函数,判断分母是否为0。
    {
    if(b==0)
    {
    System.out.println("分母 不能为0!");
    System.exit(0);
    }
    c=a;
    d=b;
    selfTrim();
    } public int getNumerator()
    {
    return c;
    }
    public int getDinominator()
    {
    return d;
    } public void selfTrim()
    {
    int maxCommon=commonDivisor(c,d); //求出两个数的最大公约数。
    c=c/maxCommon; //分式为最简。
    d=d/maxCommon;
    //整理正负号。
    if((c>0&&d<0)||(c<0&&d<0))
    {
    c=-c;
    d=-d;
    }
    } public String toString() //重写tostring().
    {
    if(c==0||d==1) //分母为1 直接输出分子.
    {
    return Integer.toString(c);
    }
    return Integer.toString(c)+"/"+Integer.toString(d); //输出c/d.
    } //计算2个数的最大公约数。按绝对值计算。
    public int commonDivisor(int x,int y) //计算2个数的最大公约数。按绝对值计算。
    {
    if(x==0||y==0)
    {
    return 1;
    }
    int x1;
    int y1; x1=(Math.abs(x)>Math.abs(y))?Math.abs(x):Math.abs(y); //使x1>y1.
    y1=(Math.abs(x)>Math.abs(y))?Math.abs(y):Math.abs(x);
    int z=1;
             while(z!=0) 
             {
    z=x1%y1;
              x1=y1;
              y1=z;
              } 
    return x1;
    }
      

  5.   

    为什么我的主方法里的第二条else if
    System.out.print(""+a+"/"+b+"="+(new Fraction(a,b))); 的new Fraction(a,b)报错?
    No enclosing instance of type 真分数函数 is accessible. Must qualify the allocation with an enclosing instance of type 真分数函数 (e.g. x.new A() where x is an instance of 真分数函数).
      

  6.   

    可以了!我粗心了,写得很好很强大!学习了  想问问你写代码前怎样布局类和方法的?另外再问一下,如果要求两个分数之和,输入a,b,c,d 
    输入3 9 4 7输出3/9+4/7=19/21 样例输入
    3 2 1 6
    样例输出
    3/2+1/6=1+2/3
    这种 又要怎样转换? 分给定你了
      

  7.   

    由于LZ需求是俩自然数,在下就不作负数相关处理了: public static void main(String[] args) {
    int m, n;
    Scanner input = new Scanner(System.in); try {
    // 输入两个自然数
    do {
    System.out.print("m="); m = input.nextInt();
    } while (m <= 0); do {
    System.out.print("n="); n = input.nextInt();
    } while (n <= 0); System.out.printf("%d/%d=", m, n); if (m / n != 0)
    System.out.print(m / n); if (m % n != 0) {
    int g = gcd(m, n); System.out.printf("+%d/%d\n", m % n / g, n / g);
    }
    } catch (Exception ex) {
    ex.printStackTrace();
    }
    } // 辗转相除法(最大公约数)
    static int gcd(int m, int n) {
    if (m < n) {
    m ^= n;
    n ^= m;
    m ^= n;
    } while (n != 0) {
    int t = m;
    m = n;
    n = t % m;
    } return (m);
    }
      

  8.   

    这个也是小学算术的内容了哈。
    仅供参考:package com.codetest.test;import java.util.Scanner;public class MathTest {
    public static void main(String[] args) {
    // int m, n;
    int n; Scanner input = new Scanner(System.in); try {
    // // 输入两个自然数
    // System.out.print("m=");
    //
    // m = input.nextInt();
    //
    // do {
    // System.out.print("n=");
    //
    // n = input.nextInt();
    // } while (n == 0);
    //
    // System.out.printf("%d/%d=", m, n);
    //
    // if (n < 0) {
    // m = -m;
    // n = -n;
    // }
    //
    // display(m, n); // 输入个数
    System.out.print("数据个数:"); do {
    n = input.nextInt();
    } while (n <= 0); int c = (n >> 1) + ((n & 1) > 0 ? 1 : 0); int a[] = new int[c], b[] = new int[c]; // 输入数据
    for (int i = 0, l = n >> 1; i < l; i++) {
    System.out.printf("请输入分子%d:", i + 1);
    a[i] = input.nextInt();
    do {
    System.out.printf("请输入分母%d:", i + 1);
    b[i] = input.nextInt();
    } while (b[i] == 0);
    } if ((n & 1) > 0) {
    System.out.printf("请输入分子%d:", (n >> 1) + 1);
    a[n >> 1] = input.nextInt();
    b[n >> 1] = 1;
    } // 输出及调整数据
    for (int i = 0; i < c; i++) {
    if (b[i] < 0) {
    a[i] = -a[i];
    b[i] = -b[i];
    } if (b[i] == 1)
    System.out.printf(i > 0 ? "+%d" : "%d", a[i]);
    else
    System.out.printf(i > 0 ? "+%d/%d" : "%d/%d", a[i], b[i]);
    } System.out.print('='); int sumA = 0, sumB = 1; // 将所有分数整合成一假分数
    for (int i = 0; i < c; i++) {
    for (int j = 0; j < c; j++)
    if (i != j)
    a[i] *= b[j];
    sumA += a[i];
    sumB *= b[i];
    } // 输出结果
    display(sumA, sumB);
    } catch (Exception ex) {
    ex.printStackTrace();
    }
    } // 输出结果
    static void display(int m, int n) {
    if (m / n != 0)
    System.out.print(m / n); if (m % n != 0) {
    int g = gcd(Math.abs(m), n); System.out.printf("%+d/%d\n", m % n / g, n / g);
    }
    } // 辗转相除法(最大公约数)
    static int gcd(int m, int n) {
    if (m < n) {
    m ^= n;
    n ^= m;
    m ^= n;
    } while (n != 0) {
    int t = m;
    m = n;
    n = t % m;
    } return (m);
    }
    }
      

  9.   

    整理了一下,参考一下:import java.util.Scanner;
    public class IntAndFraction1
    {
    public static void main(String[] args)
    {
    Scanner sc=new Scanner(System.in);
    System.out.println("请输入第一个分式的分子:");
    int a=sc.nextInt();
    int b=1;
    do
    {
    System.out.println("请输入第一个分式的分母(不可为零!):");
    }while((b=sc.nextInt())==0);
    System.out.println("请输入第二个分式的分子:");
    int c=sc.nextInt();
    int d=1;
    do
    {
    System.out.println("请输入第二个分式的分母(不可为零!):");
    }while((d=sc.nextInt())==0); Fraction fraction_ab=new Fraction(a,b);
    System.out.println("简化后第一个分式为: "+a+"/"+b+"="+fraction_ab);
    Fraction fraction_cd=new Fraction(c,d);
    System.out.println("简化后第二个分式为: "+c+"/"+d+"="+fraction_cd); //a/b+c/d
    //
    Fraction fraction_add=fraction_ab.plus(fraction_cd);
    System.out.println("("+a+"/"+b+") + ("+c+"/"+d+") = "+"("+fraction_add+")");
    //a/b-c/d
    Fraction fraction_minus=fraction_ab.minus(fraction_cd);
    System.out.println("("+a+"/"+b+") - ("+c+"/"+d+") = "+"("+fraction_minus+")");
    //a/b*c/d
    Fraction fraction_multiply=fraction_ab.multiply(fraction_cd);
    System.out.println("("+a+"/"+b+") * ("+c+"/"+d+") = "+"("+fraction_multiply+")");
    //(a/b)/(c/d)
    if(fraction_cd.getNumerator()!=0) //第二个分式的分子为零,不做除法运算。
    {
    Fraction fraction_divide=fraction_ab.divide(fraction_cd);
    System.out.println("("+a+"/"+b+") / ("+c+"/"+d+") = "+"("+fraction_divide+")");
    } }
    }class Fraction
    {
    private int c;
    private int d; public Fraction() //默认构造函数,分子分母都为1。
    {
    c=1;
    d=1;
    }
    public Fraction(int a,int b) //带参数构造函数,判断分母是否为0。
    {
    if(b==0)
    {
    System.out.println("分母 不能为0!");
    System.exit(0);
    }
    c=a;
    d=b;
    selfTrim();
    } public int getNumerator()
    {
    return c;
    }
    public int getDinominator()
    {
    return d;
    } public void selfTrim()
    {
    int maxCommon=commonDivisor(c,d); //求出两个数的最大公约数。
    c=c/maxCommon; //分式为最简。
    d=d/maxCommon;
    //整理正负号。
    if((c>0&&d<0)||(c<0&&d<0))
    {
    c=-c;
    d=-d;
    }
    } public String toString() //重写tostring().
    {
    if(c==0||d==1) //分母为1 直接输出分子.
    {
    return Integer.toString(c);
    } else if(Math.abs(c)<Math.abs(d))
    {
    return Integer.toString(c)+"/"+Integer.toString(d);
    }
    else
    {
    return c/d+(c<0?"":"+")+Integer.toString(c%d)+"/"+Integer.toString(d);//值为负,不加加号。
    }
    }
    //----- plus
    public Fraction minus(Fraction f2)
    {
    int newNumerator=c*f2.getDinominator()-d*f2.getNumerator();
    int newDinominator=d*f2.getDinominator(); int maxCommon=commonDivisor(newNumerator,newDinominator);
    return new Fraction(newNumerator/maxCommon,newDinominator/maxCommon);
    }
    //---- minus
    public Fraction plus(Fraction f2)
    {
    int newNumerator=c*f2.getDinominator()+d*f2.getNumerator();
    int newDinominator=d*f2.getDinominator(); int maxCommon=commonDivisor(newNumerator,newDinominator);
    return new Fraction(newNumerator/maxCommon,newDinominator/maxCommon);
    }
    //----- mutiply
    public  Fraction multiply(Fraction f2) //两个分数相乘。
    {
    int newNumerator=c*f2.getNumerator();
    int newDinominator=d*f2.getDinominator(); int maxCommon=commonDivisor(newNumerator,newDinominator);
    return new Fraction(newNumerator/maxCommon,newDinominator/maxCommon);
    }

    //-----  divide
    public Fraction divide(Fraction f2)
    {
    if(f2.getNumerator()==0)
    {
    System.out.println("0不能做除数!");
    System.exit(0);
    }
    Fraction result=new Fraction();
    int newNumerator=c*f2.getDinominator();
    int newDinominator=d*f2.getNumerator(); int maxCommon=commonDivisor(newNumerator,newDinominator);
    return new Fraction(newNumerator/maxCommon,newDinominator/maxCommon);
    }
    //计算2个数的最大公约数。按绝对值计算。
    public int commonDivisor(int x,int y) //计算2个数的最大公约数。按绝对值计算。
    {
    if(x==0||y==0)
    {
    return 1;
    }
    int x1;
    int y1; x1=(Math.abs(x)>Math.abs(y))?Math.abs(x):Math.abs(y); //使x1>y1.
    y1=(Math.abs(x)>Math.abs(y))?Math.abs(y):Math.abs(x);
    int z=1;
             while(z!=0) 
             {
    z=x1%y1;
              x1=y1;
              y1=z;
              } 
    return x1;
    }
    }
      

  10.   

    又见Stallone……话说8-8/6*6不就是8%6么,这样是画蛇添足哈……
      

  11.   

    Quote: 引用 14 楼 nmyangym 的回复:

    整理了一下,参考一下:
    import java.util.Scanner;
    public class 两个分数之和函数 { /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    Scanner rd=new Scanner(System.in);
    int a=rd.nextInt();
    int b=rd.nextInt();
    int c=rd.nextInt();
    int d=rd.nextInt();
    Fraction fraction_ab=new Fraction(a,b);
    Fraction fraction_cd=new Fraction(c,d);
    Fraction fraction_add=fraction_ab.add(fraction_cd);
    System.out.print("("+a+"/"+b+") + ("+c+"/"+d+") = "+"("+fraction_add+")"); 
    }
    }
    class Fraction
    {
    private int c;
    private int d;
    public Fraction()
    {
    c=1;
    d=1;
    }
    public Fraction(int a,int b)
    {
    if(b==0)
    {
    System.out.print("");
    System.exit(0);
    }
    c=a;
    d=b;
    selfTrim();
    }
    public int getNumerator()
    {
    return c;
    }
    public int getDenominator()
    {
    return d;
    }
    public void selfTrim()
    {
    int maxCommon=commonDivisor(c,d);
    c=c/maxCommon;
    d=d/maxCommon;
    if((c>0&&d<0)||(c<0&&d<0))
    {
    c=-c;
    d=-d;
    }
    }
    public String toString()
    {
    if(c==0||d==1)
    {
    return Integer.toString(c);
    }
    else if(Math.abs(c)<Math.abs(d))
    {
    return Integer.toString(c)+"/"+Integer.toString(d);
    }
    else
    {
    return c/d+(c<0?"":"+")+Integer.toString(c%d)+"/"+Integer.toString(d);
    }

    }
    public Fraction add(Fraction f2)
    {
    int newNumerator=c*f2.getDenominator()+d*f2.getNumerator();
    int newDenominator=d*f2.getDenominator();
    int maxCommon=commonDivisor(newNumerator,newDenominator);
    return new Fraction(newNumerator/maxCommon,newDenominator/maxCommon);
    }

    public int commonDivisor(int x,int y)
    {
    if(x==0||y==0)
    {
    return 1;
    }
    int x1,y1;
    x1=(Math.abs(x)>Math.abs(y))?Math.abs(x):Math.abs(y);
    y1=(Math.abs(x)>Math.abs(y))?Math.abs(y):Math.abs(x);
    int z=1;
    while(z!=0)
    {
    z=x1%y1;
    x1=y1;
    y1=z;
    }
    return x1;
    }
    }
    为什么我的class Fraction报错The type Fraction is already defined?
      

  12.   

    不是写得很清楚了么?“类型名称重复”,同一个包内有两个Fraction类……
      

  13.   

    楼上说的对.类名重复了. 你把目录下的Fraction.java 删掉试试。