取小数的循环体 博客分类: java算法 java算法字符串小数
程序员文章站
2024-03-24 21:56:40
...
1/7 = 0.142857142... 是个无限循环小数。
任何有理数都可以表示为无限循环小数的形式。
本题目要求即是:给出一个数字的循环小数表示法。
例如:
输入:
1,5
则输出:
0.2
输入:
1,7
则输出:
0.[142857]
输入:
7,6
则输出:
1.1[6]
用户输入的格式是:
整数,整数
每个整数范围均为:1~1000
程序输出两个整数做除法产生的小数或无限循环小数(循环节用方括号括起)。
要求考生把所有类写在一个文件中。
调试好后,存入与考生文件夹下对应题号的“解答.txt”中即可。
相关的工程文件不要拷入。请不要使用package语句。
另外,源程序中只能出现JDK1.5中允许的语法或调用。不能使用1.6或更高版本。
package 循环小数; public class Main { public static void main(String[] arg){ double a =5; double b = 9; f(a, b); } //处理数据 public static void f(double a ,double b){ double c = a/b; String str = String.valueOf(c); // System.out.println(str); //取出整数和小数部分 int index = str.indexOf("."); String integer = str.substring(0,index); String decimals = str.substring(index+1, str.length()-index+1); // System.out.println(decimals); // 对小数部分进行循环取循环体; String temp = ""; String forTempString = ""; for(int i=0;i<decimals.length()-1;i++){ String ch = ""+decimals.charAt(i); if(!temp.contains(ch)){ temp += ""+ch; }else{ forTempString+=ch; } } // System.out.println(temp+" "+forTempString); String result =str; //记录最后结果 for(int i=temp.length()-1;i>=0;i--){ //从最后一位开始取 字符,然后在forTempString中取相同的字符进行比较,如果相同,则该基数为循环体;剩余temp中为取的部分为非循环体; String base = temp.substring(i, temp.length()); int n = temp.length()-i; //取字符的数量; if(forTempString.substring(0, n).equals(base)){ //此时的base 就是循环体; // System.out.println(base); //当前的i的值能得出非循环体,组合得到最后结果 // System.out.println(temp.subSequence(0, i)); result = integer+"."+temp.substring(0, i)+"["+base+"]"; break; } } System.out.println(result); } }
推荐阅读
-
使用二进制替代解决全排列问题 博客分类: java算法 算法全排列字符串二进制
-
买不到的数目,组合问题 博客分类: java算法 组合买不到的数
-
取小数的循环体 博客分类: java算法 java算法字符串小数
-
算法的时间复杂度分析 博客分类: 数据结构java算法 算法时间复杂度
-
求二进制数中1的个数 博客分类: java 服务 java算法二进制
-
java.security.Security 支持的安全策略和算法 博客分类: java dsasecuritymd5sha1
-
怎样通过词频得到这个词频的排序? 博客分类: java综合web算法技术杂文 信息检索搜索词频大规模齐普夫法则
-
Java中求阶乘的算法 博客分类: Java 算法Java
-
二叉树的深度优先遍历和广度优先遍历 博客分类: Java 算法数据结构
-
Java实现可泛型的Heap 博客分类: Accumulation heap算法堆排序