双精度到底有多精?
http://acm.zju.edu.cn/show_problem.php?pid=1962
一看这题,感觉简单嘛。
10^100 double 以内,double 可以精确到 10^308,用double 数不会溢出 .
不会溢出就好办了,于是决定用数组存放Fibonacci 数,总共480个。
输入a,b 再和数组里的数比较,很简单就可以数出几个数在[a,b] 以内。
很快写好了一段代码,如下。
提交
wrong answer
移……
仔细的检查代码一遍,没错!又交。
wrong answer
这下慌了,一遍一遍的查看代码,一遍一遍的交。
交了n 次,不交了。
发到算法版一问,大虾曰:“高精度。。。”.
不能用double.
为什么不能用? 数没溢出呀!
没人答。
重写代码
写了几个函数,用数组表示数。
char * Add(char *p1,char *p2) //长整数相加
写了个
int Cmp(char *s1,char *s2) //长整数比较大小
还写了个
void Reverse(char *p)//字符串的倒转
终于通过。
但始终没明白为什么不能用double .
想问一下,双精度到底有多精?
#include <iostream.h>
#include <math.h>
double Getnum(char *num)
{
double sum=0;
cin>>num;
while(*num)
{
sum=sum*10+(*num-'0');
num++;
}
//cout<<sum<<endl;
return sum;
}
int main()
{
char num[120];
double arry[1000];
double f1,f2,f3;
double a,b;
int count,j,i;
arry[0]=1;
arry[1]=2;
arry[2]=3;
for(i=3;f3<=pow(10,100);i++)
{
f1=arry[i-2];
f2=arry[i-1];
f3=f1+f2;
arry[i]=f3;
}
cout<<i<<endl;
a=Getnum(num);
b=Getnum(num);
while(!(a==0&&b==0))
{
count=0;
for(j=0;j<i;j++)
if(a<=arry[j]&&arry[j]<=b)
count++;
cout<<count<<endl;
a=Getnum(num);
b=Getnum(num);
}
return 0;
}