用C++编程求1+1/2!+1/3!+.....+1/12!,为啥无结果呢?求改正。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用C++编程求1+1/2!+1/3!+.....+1/12!,为啥无结果呢?求改正。相关的知识,希望对你有一定的参考价值。

#include <iostream>
using namespace std;
int main()

int mat(int);
int a,b=0;
for(a=1;a<=12;a++)

b=b+1/(mat(a));

cout<<b;
cin>>a;
return 0;

int mat(int n)

int f(int);
int y,a;
y=f(n);
cin>>a;
return y;


int f(int n)

if (n==1)
return 1;
else
return (n*n+f(n-1));

结果要精确到十的负九次方。大家的代码有的可以但精确度不够,有哪位高人能给个完整的代码吗?新手学C++,求指点。
win7系统,加一句cin>>a,防止窗口自动关闭。

参考技术A int mat(int n)函数中
cin>>a; 表示你要输入数据才能继续执行。
况且你的main函数中,b的类型用的是int,1/(mat(a))的值为0,执行后的结果应该为1。建议换成double型或者float型,这样就可以输出小数部分啦。
补充程序吧:
#include <iostream>
using namespace std;
int mat(int);
int f(int);
int main()

//int mat(int);
int a = 0;
double num1 = 0;
double num2 = 0;
double b = 0;
for(a=1;a<=12;a++)

num1 = mat(a);
num2 = 1/num1;
b = b + num2;

cout<<b;
//cin>>a;
return 0;

int mat(int n)

//int f(int);
int y,a;
y=f(n);
//cin>>a;
return y;


//阶乘
int f(int n)

//if (n==1)
// return 1;
//else
// return (n*n+f(n-1));
int iNum = 0;
int sum = 0;
sum = 1;
for (iNum=1; iNum<=n;iNum++)

sum = sum * iNum;

return sum;
参考技术B 不能用递归, 12!很大会溢出,下面的更简单!
#include <iostream>
using namespace std;
int main()

double a = 1, sum = 0;
for(int i = 1; i <= 12; i++)

sum += a;
a = a / i;

cout << sum << endl;
return 0;
追问

谢谢指出这个问题,但求的好像是除以i的结果而不是i!的结果,能给个完整的代码吗?要精确到十的负九次方

追答

#include
using namespace std;
int main()

double a = 1, sum = 0;
for(int i = 1; i <= 12; i++)

a = a / i; //两句换位置
sum += a;

cout << sum << endl;
return 0;

上面的就是你要求的!!分析一下你看看:
第1次循环 i等于1, a 等于1
a = a/i = 1/1
sum = sum + a = 0 + 1 = 1
第2次循环 i等于2, a 等于
a = a/i = 1/2
sum = sum + a = 1 + 1/2
第3次循环 i等于3, a 等于
a = a/3 = 1/2/3= 1/(2*3)
sum = sum + a = 1 + 1/2 +1/(2*3)

追问

哦,是啦。但为什么输出的是小数点后四位,我想求后九位的。麻烦啦。

追答

#include
using namespace std;
int main()

double a = 1, sum = 0;
for(int i = 1; i <= 12; i++)

a = a / i; //两句换位置
sum += a;

cout.precision(9); // 设置9位有效数字
cout << sum << endl;
cout.precision(6);
return 0;

本回答被提问者采纳
参考技术C main函数里面1/(mat(a));会变成0;因为int形的1/2=0;应该改成double形的或float形的 参考技术D #include <iostream>
using namespace std;
int mat(int n);
int f(int n);
int main()

int a;
float b=0.0;//定义成浮点数的
for(a=1;a<=12;a++)

b=b+1.0/f(a);

cout<<b;
return 0;


int f(int n)

if (n==1)
return 1;
else
return (n*f(n-1));
第5个回答  2011-12-03 #include <iostream> using namespace std; int main() double a = 1, sum = 0; for(int i = 1; i <= 12; i++) a = 1.0 / i; sum += a; cout << sum << endl; return 0;

C++编程:结构体类型编程实例“求圆形水塘甬道面积及栅栏长度

这样,程序设计者就声明了一个新的结构体类型Student(struct是声明结构体类型时所必须使用的关键字,不能省略),它向编译系统声明: 这是一种结构体类型,它包括num, name, sex, age, score, addr等不同类型的数据项。应当说明Student是一个类型名,它和系统提供的标准类型(如int、char、float、double 一样,都可以用来定义变量,只不过结构体类型需要事先由用户自己声明而已。

C++结构体使用实例:

有一圆形水塘如下图所示,水塘半径为 N米,甬道宽3米且外沿有栅栏围挡保护,编写程序实现求水塘的栅栏长度和甬道面积。 


#include<iostream>using namespace std;const float PI = 3.14159f;struct Circle //声明一个结构体类型Circle { float radius; float Circumference() //圆周长 { return 2 * PI * radius; } float Area() //圆面积 { return PI * radius * radius;  }};int main(){ float radius; cout<<"请输入内圆的半径:"; cin>>radius; //声明Circle对象  Circle Pool = {radius}; Circle Poolrim = {radius+3}; //计算栅栏长度  cout<<"栅栏长度是:"<<Poolrim.Circumference()<<endl; cout<<"甬道面积是:"<<Poolrim.Area()-Pool.Area()<<endl; return 0;}

以上是关于用C++编程求1+1/2!+1/3!+.....+1/12!,为啥无结果呢?求改正。的主要内容,如果未能解决你的问题,请参考以下文章

C语言编程序,求e的近似值e≈1+1/2!+1/3!+…+1/n!

c语言 求e的近似值e=1+1/1!+1/2!+1/3!+……当最后一项小于10的6次方。

c语言编程题 计算圆周率的近似值,计算公式为:e=1+1/1!+1/2!+1/3!+1/4!+1/

47求1+2+3+...+n

[剑指Offer] 47.求1+2+3+...+n

C++输入整数n,计算下列表达式的值:s= 1 +1/2!+1/3!+.....+1/n!要求输出s的值,小数点保留6位