C++运行结果出现1.#INF

来源:互联网 发布:不用网络的汽车游戏 编辑:程序博客网 时间:2024/05/17 22:49
转载自:http://zhidao.baidu.com/question/141962606

问题:

我的代码:

#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
这是一个算大数的库,自己看看代码 

原创粉丝点击