您的位置:首页 > 编程语言

编程之美--2.6 精确表达浮点数

2014-09-01 22:04 239 查看
解答

1 关于解题的逻辑,书上说的很明确,我这里就是根据书上逻辑写出代码。

2 这里的输入因为有括号,所以我选择了字符串;输出为一个分数,所以我选择了一个数组,里面有两个元素,分别代表分子和分母。特别为了能够数值不溢出,我的数组 类型为long。考虑如果分子或分母long溢出,那么我会选择用链表来存储这个数。

3 我的代码假设 字符串书写规范,符合题目的所有要求 。

4 代码分为有限小数和无限小数来处理。

5 处理10的幂单独做一个函数处理。

代码

public static long[] floatToFraction(String str){
long[] ans = new long[2];
boolean containParenthese = str.contains("(");
if(!containParenthese){
dealWithFinite(ans,str);
}
else{
dealWithInfinite(ans,str);
}

return ans;
}

private static void dealWithInfinite(long[] ans, String str) {
int firstParenthIndex = str.indexOf('(');
String finitePart = str.substring(2,firstParenthIndex);
String infinitePart = str.substring(firstParenthIndex+1,str.length()-1);
long finiteTen = strToTenEx(finitePart);
long infiniteTen = strToTenEx(infinitePart);
long finite = Long.parseLong(finitePart);
long infinite = Long.parseLong(infinitePart);
ans[0]=finite*(infiniteTen-1)+infinite;
ans[1]=(infiniteTen-1)*finiteTen;

}

public static void dealWithFinite(long[] ans,String str){
str = str.substring(2);
ans[1]=strToTenEx(str);
ans[0] = Long.parseLong(str);
}

public static long strToTenEx(String str){
int n = str.length();
long temp =1l;
for(int i=1;i<=n;i++){
temp*=10;
}
return temp;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息