用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,防止窗口自动关闭。
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;
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米且外沿有栅栏围挡保护,编写程序实现求水塘的栅栏长度和甬道面积。
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/
C++输入整数n,计算下列表达式的值:s= 1 +1/2!+1/3!+.....+1/n!要求输出s的值,小数点保留6位