编程之美--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;
}
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;
}
相关文章推荐
- 读书笔记之编程之美 – 2.6 精确表达浮点数
- 编程之美-2.6、精确表达浮点数
- [编程之美] PSet2.6 精确表达浮点数
- [编程之美] 2.6 精确表达浮点数
- 【编程之美】2.6 精确表达浮点数
- 【编程之美】2.6精确表达浮点数
- 编程之美-2.6-精确表达浮点数
- 重新开始战斗11-编程之美-精确表达浮点数
- 编程之美2.6——精确表达浮点数
- 编程之美2.6 精确表达浮点数
- 编程之美读书笔记2.6—精确表达浮点数
- 《编程之美》学习笔记——2.6精确表达浮点数
- 编程之美 2.6 精确表达浮点数
- 2.6 精确表达浮点数
- 编程之美2.6 精确表达浮点数
- 2.6-精确表达浮点数
- 编程之美 set 2 精确表达浮点数
- 编程之美:第二章 数字之魅 2.6精确表达浮点数
- 编程之美--精确表达浮点数
- 精确表达浮点数 -- 编程之美