编程之美——精确表达浮点数
2012-12-06 22:13
281 查看
编程之美——精确表达浮点数
在计算机中,使用float或者double来存储小数是不能得到精确值的。如果你希望得到精确计算结果,最好是用分数形式来表示小数。有限小数或者无限循环小数都可以转化为分数。比如: 0.9 = 9/10 0.333(3)= 1/3(括号中的数字表示是循环节) 当然一个小数可以用好几种分数形式来表示。如: 0.333(3)= 1/3 = 3/9 给定一个有限小数或者无限循环小数,你能否以分母最小的分数形式来返回这个小数呢?如果输入为循环小数,循环节用括号标记出来。下面是一些可能的输入数据,如0.3、0.30、0.3(000)、0.3333(3333)、……
具体推断请见《编程之美》这本书,下面给出详细代码。
#include<iostream>
#include<stdio.h>
using namespace std;
long gcd(long up,long down)
{
long r;
long a=up;
long b=down;
if(b<a)
{
long temp=a;
a=b;
b=temp;
}
while(a!=0)
{
r=b%a;
b=a;
a=r;
}
return b;
}
int main()
{
long a=0,b=0,c=0;
cin>>c>>a>>b;
if(a==0&&b==0)
cout<<c;
else
{
long up=c;
long down=1;
long ta=a;
while(ta)
{
down*=10;
ta/=10;
}
up=c*down+a;
if(b!=0)
{
long wb=1;
long tb=b;
while(tb)
{
wb*=10;
tb/=10;
}
up=up*(wb-1)+b;
down=down*(wb-1);
}
long fac=gcd(up,down);
cout<<up/fac<<"/"<<down/fac<<endl;
}
}
上面的程序代码注意几点:在求公约数方面有很多值得优化的地方,请详见本博客讲解最大公约数的问题。
还有就是小数很大很大的时候,可以采用大整数(结合字符串)来进行编程。
在计算机中,使用float或者double来存储小数是不能得到精确值的。如果你希望得到精确计算结果,最好是用分数形式来表示小数。有限小数或者无限循环小数都可以转化为分数。比如: 0.9 = 9/10 0.333(3)= 1/3(括号中的数字表示是循环节) 当然一个小数可以用好几种分数形式来表示。如: 0.333(3)= 1/3 = 3/9 给定一个有限小数或者无限循环小数,你能否以分母最小的分数形式来返回这个小数呢?如果输入为循环小数,循环节用括号标记出来。下面是一些可能的输入数据,如0.3、0.30、0.3(000)、0.3333(3333)、……
具体推断请见《编程之美》这本书,下面给出详细代码。
#include<iostream>
#include<stdio.h>
using namespace std;
long gcd(long up,long down)
{
long r;
long a=up;
long b=down;
if(b<a)
{
long temp=a;
a=b;
b=temp;
}
while(a!=0)
{
r=b%a;
b=a;
a=r;
}
return b;
}
int main()
{
long a=0,b=0,c=0;
cin>>c>>a>>b;
if(a==0&&b==0)
cout<<c;
else
{
long up=c;
long down=1;
long ta=a;
while(ta)
{
down*=10;
ta/=10;
}
up=c*down+a;
if(b!=0)
{
long wb=1;
long tb=b;
while(tb)
{
wb*=10;
tb/=10;
}
up=up*(wb-1)+b;
down=down*(wb-1);
}
long fac=gcd(up,down);
cout<<up/fac<<"/"<<down/fac<<endl;
}
}
上面的程序代码注意几点:在求公约数方面有很多值得优化的地方,请详见本博客讲解最大公约数的问题。
还有就是小数很大很大的时候,可以采用大整数(结合字符串)来进行编程。
相关文章推荐
- 《编程之美》---精确表达浮点数子问题---辗转相除法求取最大公约数
- 编程之美2.6 精确表达浮点数
- 精确表达浮点数 编程之美
- 编程之美2.6 精确表达浮点数
- 编程之美2.6——精确表达浮点数
- 编程之美:第二章 数字之魅 2.6精确表达浮点数
- 编程之美精确表达浮点数
- 《编程之美》学习笔记——2.6精确表达浮点数
- 精确表达浮点数
- 【编程之美】2.6精确表达浮点数
- [编程之美] 2.6 精确表达浮点数
- 1214 -- 精确表达浮点数
- 编程之美 set 2 精确表达浮点数
- 精确表达浮点数 -- 编程之美
- 精确表达浮点数
- 编程之美读书笔记-精确表达浮点数
- 【编程之美】2.6 精确表达浮点数
- 浮点数(有限浮点数、无限循环浮点数)的精确表达
- 编程之美--2.6 精确表达浮点数
- 答案_精确表达浮点数