首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

求思路解决办法

2012-12-21 
求思路任意输入二个自然数, 若商为整数, 则直接显示商 否则把商分解成一个自然数和一个正的既约真分数之

求思路
任意输入二个自然数, 若商为整数, 则直接显示商; 否则把商分解成一个自然数和一个正的既约真分数之和才显示. 例如: 输入: 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?
[最优解释]
(c<0&&d<0))
{
c=-c;
d=-d;
}
}

public String toString()//重写tostring().
{
if(c==0
[其他解释]
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);
}

[其他解释]
不好意思反了,正确如下:
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);
}
[其他解释]

引用:
不好意思反了,正确如下:
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);
}

我是要思路。。不一定是输入8和6的  换成输入m,n
[其他解释]
我做了一个,楼主参考一下:
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).

[其他解释]
引用:
我做了一个,楼主参考一下:
1 设计一个分式fraction类, 它能把两个整数整理成最简分式形式,且处理正、负号. 重写toString(),使输出分式形式。
   如:整数是3,6 输出1/2。
       整数是-2,-6,输出1/3。
       整数是2,-6,输出-1/3。(不是1/-3)。
2 设计控制台输入2个整数,分子a, 分母b, 分3重情况输出。
  1) a……

可以发来参照一下吗?谢了
[其他解释]

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;
}


[其他解释]
引用:
引用:不好意思反了,正确如下:
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换成m和n不就好了
[其他解释]
引用:
Java code?



12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959……

为什么我的主方法里的第二条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 真分数函数).


[其他解释]
贴出代码看看.
[其他解释]

引用:
贴出代码看看.

可以了!我粗心了,写得很好很强大!学习了  想问问你写代码前怎样布局类和方法的?

另外再问一下,如果要求两个分数之和,输入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
这种 又要怎样转换? 分给定你了
[其他解释]
话说这是小学算术题吧……超简单的。

[其他解释]
由于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);
}


[其他解释]
整理了一下,参考一下:

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)
[其他解释]

引用:
引用:贴出代码看看.
可以了!我粗心了,写得很好很强大!学习了  想问问你写代码前怎样布局类和方法的?

另外再问一下,如果要求两个分数之和,输入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
这种 又要怎样……

这个也是小学算术的内容了哈。
仅供参考:

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);
}
}


[其他解释]
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

热点排行