刚开始使用float发现存在四舍五入的现象,导致位数计算不准,所以均采用long的格式进行计算结果正确,但是导入官网的判定系统后发现并不太行,也找不出哪里错了。。。。
import java.lang.reflect.Array;
import java.util.Scanner;
public class Main {
public long gcd(long m,long n){
long last=0;
while (n!=0){
last=m%n;
m=n;
n=last;
}
return m;
}
public static void main(String[] args) {
Main fab = new Main();
Scanner Input = new Scanner(System.in);
int count=Integer.parseInt(Input.nextLine());
while (count>0) {
String a=Input.nextLine();
//找到 . ( ) 的相应下标,便于提取
int m=a.indexOf("."),l=0,n=0;
if(a.contains("(")) {
n = a.indexOf("(");
l = a.indexOf(")");
}
else {
n=a.length();
l=n;
}
//提取数字
String b="";//非循环部分
String c="";//循环部分
for(int k=m+1;k<n;k++)
b+=a.charAt(k);
for(int k=n+1;k<l;k++)
c+=a.charAt(k);
long flag=(long)Math.pow(10,b.length());
long num1=0;//非循环部分
if(b.length()>0)
num1=Long.parseLong(b);
long num2=0;//循环部分
if(c.length()>0)
num2=Long.parseLong(c);
String d="";
for(int k=0;k<c.length();k++)
d+="9";
long num3=0;//分母9的个数
if(d.length()>0)
num3=Long.parseLong(d);
if(num2!=0) {//循环小数
num2 += num1 * num3;
num3 *= flag;
}
else{//非循环小数
num2=num1;
num3=flag;
}
float last=fab.gcd(num2,num3);
System.out.println((int)(num2/last)+"/"+(int)(num3/last));
count--;
}
}
}