呵呵呵呵,楼主,如果这是一道考试题的话,凑合着答也就可以了。
说实话,这道题本身有大问题啊!
int类型的数据,就算在VC下,其与long一致:4B补码,最大表示2147483647。
您先用计算机上的计算器算算30!有多少位?
超出int的表示范围了!
改用double类型吧。而且,你的算法也稍显复杂了:有必要每次都求阶乘么?请看下面的例子:
double s = 1;
int i;
for(i = 1; i <= 30; i++)
{
s *= i;
}
在循环里,每次算出来的s的值,就是要求和的阶乘值啊。所以,可将程序改成:
#include<stdio.h>
#include<math.h>
int main()
// 您这个主函数没有return 整型表达式; 语句啊!可是你的函数头部却明确要求返回int的啊!
// 别听你们老师吓掰掰了,老老实实用void main()吧。这样不会出错的。
{
int i;
double sum = 1;
double t = 0;
for(i=1; i<=30; i++)
{
sum = sum * i;
t += sum;
m=t/pow(10,7); // 这是啥意思啊?题目有这样的要求么?
}
printf("%0.2e", t);
}
我搞不懂耶,1!+2!+ …… + 30!怎么可能是小数呢?有必要什么小数保留两位么?
[
本帖最后由 犬虫门心本人 于 2013-12-19 16:37 编辑 ]