Java 最短连续循环字符串需要找到小数点后最短循环字符串长度的逻辑
给出了形式p/Q的一个分数,其中p和Q是正整数 查找小数部分中最长重复字符串的长度。如果小数部分不是循环打印-1 约束条件: 0Java 最短连续循环字符串需要找到小数点后最短循环字符串长度的逻辑,java,Java,给出了形式p/Q的一个分数,其中p和Q是正整数 查找小数部分中最长重复字符串的长度。如果小数部分不是循环打印-1 约束条件: 0
输入格式: 输入的第一行包含T,测试用例的数量 接下来的T行包含每个测试用例,每个测试用例包含两个空格分隔的正整数p和Q 输出格式: 输出p/Q小数部分中最短连续重复字符串的长度 样本输入: 三, 11 2 4 1030 17 样本输出: -一, -一, 一, 六, 解释: 1/1没有循环小数,因此-1 2/4没有循环小数so-1 10/30的十进制表示为2.2222。。。。因此,最短的连续循环部分的长度为1(字符串为2) 1/7的十进制表示为0.14285714285。。所以最短的连续循环字符串是142857,长度是6 时限: 三, 内存限制(MB): 五百 我的决定(不完整)import java.util.HashMap; 导入java.util.Scanner; 类递归分数 { 公共字符串fractionToDecimal(整型分子,整型分母) { long nume=Math.abs((长)分子); long deno=数学abs((长)分母); 字符串符号=(分子<0)^(分母<0)?“-”:”; 如果(deno==0){ 返回“”; }else如果(nume==0){ 返回“0”; }else if(nume%deno==0){ 返回符号+nume/deno+“”; } HashMap=新HashMap();//错误行 StringBuffer rst=新的StringBuffer(符号+nume/deno+”); long end=nume%deno*10;//值的小数部分,小数点后 int i=0; while(结束!=0){ if(地图容器(结束)){ rst.insert(rst.indexOf(“.”)和map.get(end)+1(“”); rst.追加(“)”; 返回rst.toString(); } rst.append(结束/结束); map.put(end,i++); 结束=(结束%deno)*10; } 返回rst.toString(); } 公共静态void main(字符串[]args) { int num,den; RecurringFraction rf=新的RecurringFraction(); System.out.println(“输入测试用例:”) 扫描仪sc0=新扫描仪(System.in); int testcase=sc0.nextInt(); 如果((!testcase)&&(testcase=1400))) { 系统输出打印(rf.fractionToDecimal(num,den)); } } } }
我被困在错误的行,加上我需要一个逻辑来实现根据上述问题陈述,请建议我的最佳解决方案,寻找最短的重复字符串后,小数I,e分数部分 该行是错误的,因为您试图在原语和不存在的类型long
上参数化integer
。 将行更改为:HashMap
HashMap<Long,Integer> map = new HashMap<Long, Integer>();
HashMap map=newhashmap();
需要使用实际类型进行参数化HashMap
关于算法,请告诉我们为什么你的工作不好(最好),并考虑发布一个新的、更精确的问题,因为这一个实际上是两个合一的:“为什么代码不编译?”和“如何做到这一点?”
thnkes JoNeSei已经通过主要目的是实现问题陈述逻辑的方式来固定它,代码编译得很好,但我需要一个想法来实现期望的结果,即我想在提取小数部分后将参数传递给函数,我需要以这样一种方式编写逻辑,它可以计算小数点后最短的循环字符串。HashMap<Long,Integer> map = new HashMap<Long, Integer>();