A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孤影卓尔 中级黑马   /  2014-2-24 15:57  /  911 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

java接收键盘输入,类似于“5/6”这种样式的分数,然后判断是否是最简真分数。是则输出“5/6是最简真分数”;不是则输出“5/6不是最简真分数”然后继续接收键盘输入,直到输入“-1”跳出运行。最简真分数就是分子小于分母,不能再约分。问该怎么实现??

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

7 个回复

倒序浏览

复制代码
回复 使用道具 举报
本帖最后由 e.c 于 2014-2-24 16:06 编辑

求两个数是否有公约数。

点评

e.c
private static boolean haveCommonDivisor(int i1, int i2) { int end = i1 > i2 ? i2 : i1; for (int i = 2; i <= end; i++) { if (i1 % i == 0 && i2 % i == 0) return false; } return true; }   发表于 2014-2-24 16:15

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
上面那个回帖点错了,现敲的代码,如下:
  1. import java.util.regex.Pattern;
  2. import java.io.*;
  3. public class Demo {
  4.         public static void main (String args[]) throws IOException {
  5.                 Pattern regex = Pattern.compile("[0-9]*/[0-9]*");
  6.                 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  7.                 String num = "";
  8.                 while (!(num = br.readLine()).equals("-1")) {
  9.                         if (!regex.matcher(num).matches()) {
  10.                                 System.out.println("格式不正确,请重新输入!");
  11.                                 continue;
  12.                         }
  13.                         int a = Integer.parseInt(num.substring(0, num.indexOf('/')));
  14.                         int b = Integer.parseInt(num.substring(num.indexOf('/')+1));
  15.                         if (a >= b || !isRelativelyPrime(a, b))
  16.                                 System.out.println(num + "不是最简真分数");
  17.                         else
  18.                                 System.out.println(num + "是最简真分数");
  19.                 }
  20.         }
  21.         private static boolean isRelativelyPrime (int a, int b) {
  22.                 int tmp = 0;
  23.                 while (a > 0) {
  24.                         tmp = b % a;
  25.                         b = a;
  26.                         a = tmp;
  27.                 }
  28.                 if (b == 1)
  29.                         return true;
  30.                 else
  31.                         return false;
  32.         }
  33. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 syw02014 于 2014-2-24 16:15 编辑

核心代码写给你:
public static int Is_ZDGYSHU(int a,int b)
{
        int s=0;
        for(;a>0;)
        {
                s=b%a;
                b=a;
                a=s;
        }
        if (b==1)
                return 1
        else
                return 0;
        }

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
e.c 发表于 2014-2-24 16:04
求两个数是否有公约数。

        private static boolean haveCommonDivisor(int i1, int i2) {
                int end = i1 > i2 ? i2 : i1;
                for (int i = 2; i <= end; i++) {
                        if (i1 % i == 0 && i2 % i == 0)
                                return false;
                }
                return true;
        }
回复 使用道具 举报
flying 中级黑马 2014-2-24 16:57:59
7#
本帖最后由 flying 于 2014-2-24 17:10 编辑
  1. public class Test
  2. {
  3.         public static void main(String[] args) throws Exception {
  4.                 fun();
  5.         }

  6.         private static void fun() throws Exception{
  7.                 BufferedReader bufr =
  8.                                 new BufferedReader(new InputStreamReader(System.in));
  9.                 String line=null;
  10.                 while(!(line=bufr.readLine()).equals("-1")){
  11.                         String []str =line.split("/");
  12.                         //判断是不是真分数
  13.                         if(check(str))
  14.                                 System.out.println(line+"是简真分数");
  15.                         else
  16.                                 System.out.println(line+"不是最简真分数");
  17.                 }
  18.         }

  19.         private static boolean check(String[] str) {
  20.                 int x =Integer.parseInt(str[0]);
  21.                 int y =Integer.parseInt(str[1]);
  22.                 if(x>=y)
  23.                         return false;
  24.                 else{
  25.                         for(int i=2;i<=x;i++)
  26.                                 if(x%i==0&&y%i==0)
  27.                                         return false;
  28.                         return true;
  29.                 }
  30.         }
  31. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马