Java 最短连续循环字符串需要找到小数点后最短循环字符串长度的逻辑

Java 最短连续循环字符串需要找到小数点后最短循环字符串长度的逻辑,java,Java,给出了形式p/Q的一个分数,其中p和Q是正整数 查找小数部分中最长重复字符串的长度。如果小数部分不是循环打印-1 约束条件: 0

给出了形式p/Q的一个分数,其中p和Q是正整数

查找小数部分中最长重复字符串的长度。如果小数部分不是循环打印-1

约束条件:

0

0

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