转载自:
http://zhidao.baidu.com/question/141962606
#include<iostream.h> long double seq(double x); void main() { long double n,sum; cin>>n; sum=2*seq(n); cout<<sum<<endl; } long double seq(double x) { if(x>3) return (x-2)*seq(x-1)+1; else return 2; }
2.double型只能表示到10的307次方,这是最大值了,当你输入172时,你的程序就计算到307次方了,
因此当你输入308的时候就超出double能表示的范围了。
因此出错,在C++中这是极限值,没办法让double能容纳更大的数了,因此没有办法改正。
问题:
我的代码:
#include<iostream.h> double seq(double x); void main() { double n,sum; cin>>n; sum=2*seq(n); cout<<sum<<endl; } double seq(double x) { if(x>3) return (x-2)*seq(x-1)+1; else return 2; }题目要求n可以取到200可是我的程序取200时出现1.#INF 哪里出问题了 要如何改进
答案:
1.数值太大,越界了!修改如下:#include<iostream.h> long double seq(double x); void main() { long double n,sum; cin>>n; sum=2*seq(n); cout<<sum<<endl; } long double seq(double x) { if(x>3) return (x-2)*seq(x-1)+1; else return 2; }
2.double型只能表示到10的307次方,这是最大值了,当你输入172时,你的程序就计算到307次方了,
因此当你输入308的时候就超出double能表示的范围了。
因此出错,在C++中这是极限值,没办法让double能容纳更大的数了,因此没有办法改正。
3.http://www.shoup.net/ntl/index.html
这是一个算大数的库,自己看看代码