您获得P / Q形式的一小部分,其中p和q是正整数。
查找小数部分中最长重复字符串的长度。如果小数部分不是重复打印-1。
约束:
0℃; T< 12000
0℃; P< 14000
0℃; Q< 14000
输入格式:
第一行输入包含T,即测试用例的数量。
下一个T行包含每个包含两个空格分隔的正整数P和Q的测试用例。
输出格式:
P / Q小数部分中最短连续重复串的输出长度。
示例输入:
3
1 1
2 4
10 30
1 7
示例输出:
-1
-1
1
6
阐释:
1/1没有重复的小数,所以-1
2/4没有重复的小数,所以-1
10/30的十进制表示是2.2222 ....所以最短的连续重复部分的长度为1(字符串为2)
1/7的十进制表示为0.14285714285 ..因此最短的连续重复字符串为142857,长度为6.
时间限制: 3
内存限制(MB): 500
我的声明(不完整)
import java.util.HashMap;
import java.util.Scanner;
class RecurringFraction
{
public String fractionToDecimal(int numerator, int denominator)
{
long nume = Math.abs((long)numerator);
long deno = Math.abs((long)denominator);
String sign = (numerator < 0) ^ (denominator < 0) ? "-" : "";
if (deno == 0) {
return "";
} else if (nume == 0) {
return "0";
} else if (nume % deno == 0) {
return sign + nume/deno + "";
}
HashMap<Long,Integer> map = new HashMap<Long, Integer>(); //Erroneous line
StringBuffer rst = new StringBuffer(sign + nume/deno + ".");
long end = nume%deno * 10;//The decimal portion of the value, after decimal point
int i = 0;
while (end != 0){
if (map.containsKey(end)) {
rst.insert(rst.indexOf(".") + map.get(end) + 1, "(");
rst.append(")");
return rst.toString();
}
rst.append(end/deno);
map.put(end, i++);
end = (end % deno) * 10;
}
return rst.toString();
}
public static void main(String[] args)
{
int num,den;
RecurringFraction rf=new RecurringFraction();
System.out.println("Enter Test Case:")
Scanner sc0=new Scanner(System.in);
int testcase=sc0.nextInt();
if ((!testcase) && (testcase<=1200)
{
for(int i=0; i<=testcase;i++)
{
Scanner sc=new Scanner(System.in);
num=sc.nextInt();
Scanner sc1=new Scanner(System.in);
den=sc1.nextInt();
}
}
if(((!num) && (num>=1400)) && ((!den)&&(den>=1400)))
{
System.out.print( rf.fractionToDecimal(num,den));
}
}
}
}
我被困在错误的行上加上我需要根据上面的问题陈述来实现逻辑,请建议我找到十进制i之后的最短重复字符串的最佳最优解,e分数部分。
答案 0 :(得分:0)
该行是错误的,因为您尝试在原始Range of numpy double: -1.79769313486e+308 1.79769313486e+308
At the border: 1.6332525973e+308
Blowing out of range: inf
D:\anaconda\lib\site-packages\ipykernel\__main__.py:9: RuntimeWarning: overflow encountered in double_scalars
和不存在的类型HashMap
上参数化long
。
将行更改为:
integer
HashMap<Long,Integer> map = new HashMap<Long, Integer>();
需要使用实际类型进行参数化。
关于算法,请告诉我们更多关于你为什么不工作(最佳)并考虑发布一个新的,更精确的问题,因为这个实际上是二合一:“为什么代码没有编译?”和“怎么做?”