用C++编程求1+1/2!+1/3!+.....+1/12!,为什么无结果呢?求改正。
#include<iostream>usingnamespacestd;intmain(){intmat(int);inta,b=0;for(a=1;a<=12;a++)...
#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,防止窗口自动关闭。 展开
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,防止窗口自动关闭。 展开
6个回答
展开全部
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;
}
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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不能用递归, 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;
}
#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)
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
main函数里面1/(mat(a));会变成0;因为int形的1/2=0;应该改成double形的或float形的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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));
}
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));
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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; }
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询