欢迎使用CSDN-markdown编辑器

来源:互联网 发布:复杂网络期刊 sci 编辑:程序博客网 时间:2024/06/18 07:19

1.求无限循环小数的循环节,例如1/7=0.14285714285714285,则循环节为142857 拿到这道题目第一想法就是当作普通字符串来处理,依次截取前面部分与后面部分进行比较,直到找到重复的,则重复部分为循环节。

import java.util.ArrayList;import java.util.List;import java.util.Scanner;/** * Created by hzxuhui1 on 2016/7/27. */public class xunhuan {public static boolean canZhengChu(int num1,int num2){    if(num1 % num2 == 0){        return  true;    }    else {        return  false;    }}    public static String findString(int num1,int num2){        ArrayList<Integer> yushu = new ArrayList<Integer>();        ArrayList<Integer> shang = new ArrayList<Integer>();        //异常情况及整除        if(num1 < 0 || num2 <= 0 || canZhengChu(num1,num2)){            return  null;        }        int shangshu = num1/num2;        shang.add(shangshu);        int left= num1 % num2;        //yushu中不含有当前余数        while( !yushu.contains(left) ){            yushu.add(left);            left = left * 10;            int shangshu2 =left/num2;            shang.add(shangshu2);            left = left % num2;            if(left == 0)                return  null;        }        int begin = yushu.indexOf(left)+1;        List<Integer> temp = shang.subList(begin,shang.size());        StringBuilder sb = new StringBuilder();        for(int i = 0; i < temp.size() ; i++)        {sb.append(temp.get(i));}        System.out.println(sb.toString());        return  sb.toString();    }    public static void main(String args[]){        Scanner scan = new Scanner(System.in);        while(scan.hasNext()){            String[] num = scan.nextLine().split(",");            int num1 = Integer.parseInt(num[0]);            int num2 = Integer.parseInt(num[1]);            findString(num1,num2);        }        scan.close();    }}
0 0
原创粉丝点击