用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,防止窗口自动关闭。
展开
 我来答
冉易云ST
2011-12-03 · TA获得超过535个赞
知道小有建树答主
回答量:397
采纳率:0%
帮助的人:524万
展开全部
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;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
furious_tauren
2011-12-03 · TA获得超过4055个赞
知道大有可为答主
回答量:1913
采纳率:100%
帮助的人:767万
展开全部
不能用递归, 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)
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
创作者0THux69F9t
2011-12-03
知道答主
回答量:4
采纳率:0%
帮助的人:6664
展开全部
main函数里面1/(mat(a));会变成0;因为int形的1/2=0;应该改成double形的或float形的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ge2008ge12
2011-12-03 · TA获得超过1110个赞
知道小有建树答主
回答量:683
采纳率:100%
帮助的人:346万
展开全部
#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));
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
佐佐小偶
2011-12-03
知道答主
回答量:41
采纳率:0%
帮助的人:17.6万
展开全部
#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; }
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式