c语言求阶乘和 求1+2!+3!+...+100!的和,注意溢出

这是我编的,会溢出,不正确,运行结果如下图所示
#include <stdio.h>
void main()
{
int i,j;
double num,sum=0;
for(i=1;i<=100;i++)
{
for(j=1,num=1;j<=i;j++)
num*=j;
sum+=num;
}
printf("sum=%f\n",sum);
}

今天问过老师,貌似需要数组进行定义,求大神回复啊= =

这个用C语言的基本数据类型是做不到的……一种思路是定义一个数组(数据类型是整型),这个数组整体视为一个"n进制"的"大数"(n自定,比如最熟悉的10进制),每个元素是这个数的一个数位(与十进制数进行类比,十进制数12345就相当于一个五个元素的数组,数组的每个元素是这个数的一个数位)。然后对这个数组定义加法与乘法,然后再进行循环求和即可追问

能有完整的程序代码给我看一下么,万分感谢啊

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2018-04-11
#include <stdio.h>
#define N 10000
int main()
{
static long int r[N]={1};
static long int t[N]={0};
int i,j;
int k=0,l=0,tk=0;
for(i=1;i<=100;i++)
{
for(j=0;j<=l;j++)
{
r[j]=r[j]*i+k;
k=r[j]/10000;
r[j]=r[j]%10000;
t[j]=t[j]+r[j]+tk;
tk=t[j]/10000;
t[j]=t[j]%10000;
}
if(k)
{
l++;
r[j]=k;
t[j]+=r[j];
k=0;
}
if(tk)
{
t[j]+=tk;
if(t[j]>10000)
{
t[j+1]=1;
t[j]=t[j]%10000;
}
tk=0;
}
j=l;

}
printf("1!+2!+3!+....+99!+100!=\n%d",t[j--]);
for(;j>=0;j--)
{
printf("%04d",t[j]);
}
printf("\n");

return 0;
}

1!+2!+3!+....+99!+100!=
94269001683709979260859834124473539872070722613982672442938359305624678223479506023400294093599136466986609124347432647622826870038220556442336528920420940313本回答被提问者和网友采纳
第2个回答  2013-07-03

不需要定义数组,表示成科学计数法就可以了 

如果你不想用科学计数法,你就用循环在后面零就好(用指数E循环)

#include <stdio.h>

int main(int argc, char *argv[])
{
double a=1.0;
int e=0;
for(int i=1;i<=100;i++)
{
a *= i;
while(a>10)
{
a/=10;
e++;
}
}
printf("100!=%lfE%d\n",a,e);
return 0;
}

第3个回答  2013-07-03
#include <stdio.h>
// p = p * n
void mul(int *p, int n)
{
int i, carry = 0;
for(i=1; i<=p[0]; i++)
{
p[i] = p[i]*n+carry;
carry = p[i]/10000;
p[i] = p[i]%10000;
}
if(carry)
p[++p[0]] = carry;
}
// s = s + p
void add(int *s, int *p)
{
int i, carry = 0;
for(i=1; i<=p[0]; i++)
{
s[i] = s[i]+p[i]+carry;
carry = s[i]/10000;
s[i] = s[i]%10000;
}
for(; carry; i++)
{
s[i] += carry;
carry = s[i]/10000;
s[i] = s[i]%10000;
}
s[0] = i-1;
}
// print arr
void prt_arr(int *arr)
{
int i = arr[0];
printf("%d", arr[i--]);
while(i)
printf(",%04d", arr[i--]);
}
//
int main()
{
int i, s[1024] = {1, 0}, p[1024] = {1,1};
for(i=1; i<=100; i++)
{
mul(p, i);
add(s, p);
}
prt_arr(s);
}

第4个回答  2013-07-03

结果需要验证

追问

后缀名cpp。。。。大神,有C语言编写的么

追答

噢,是cpp,vc6的,没有c++的任何语句,C++我还不会呢

c语言求阶乘和 求1+2!+3!+...+100!的和,注意溢出
这个用C语言的基本数据类型是做不到的……一种思路是定义一个数组(数据类型是整型),这个数组整体视为一个"n进制"的"大数"(n自定,比如最熟悉的10进制),每个元素是这个数的一个数位(与十进制数进行类比,十进制数12345就相当于一个五个元素的数组,数组的每个元素是这个数的一个数位)。然后...

跪求:编写c语言程序,求1到20的阶乘之和
{ long int i,k=1;for(i=1;i<=x;i++)k=k*i;return k;} int main(){ long int j,k=0;int i;for(i=1;i<=20;i++){ j=jiecheng(i);k+=j;} printf("%ld\\n",k);} 输出的结果是2561327494111820313

C语言求阶乘的和。计算1!+2!+3!……+n!
输入的a不能太大,否则整型会溢出的!!include <stdio.h> main(){ int a,b,c,s,t;s=1;t=0; \/\/ 1 ---> 0 scanf("%d",&a);for(c=1;c<=a;c++){ s *= c;t += s;} printf("%d\\n",t);}

C语言编程中 请问上s=1!+2!+3!+4!+5!```100!S 的和值 请帮我分析!是什...
假如s=1!+2!+3! 就是s=1*1+1*1*2+1*1*2*3 这道题只不过是加到100的阶乘罢了。首先,肯定有100项,即for(int i=1;i<=100;i++)sum用来统计和,用long类型吧,因为他比较大,item用来统计每一项,将item初始值为1,即1*1 1*2 1*2*3 这种项。通过规律发现,项满足item*=i;...

c语言用函数求前n个数的阶乘和(即求1!+2!+3!+…+)
return 1; else return num*jiecheng(num-1);}int main(void){ long i,sum=0; int n; scanf("%d",&n); for(i=1;i<=n;i++) { sum+=jiecheng(i); } printf("sum is :%d\\n",sum); return 0;} ...

C语言编程求若干个连续整数的阶乘之和:1!+2!+3!+...+n!,要求求每个数...
include"stdio.h"int mul(int n);void main(){int i, n, num = 0;printf("输入待连续阶乘并求和的整数个数为:");scanf("%d", &n);for (i = 1; i <= n; i++)num += mul(i);printf("1!+2!+3!+...+n!=%d\\n", num);\/\/这里printf()函数不需要&}int mul(int n)...

C语言怎样求1到100的阶乘和
下面小编给大家演示一下。1、首先打开Dev C++软件,新建C语言控制台项目,如下图所示 2、然后在main.c文件中输入计算阶乘的逻辑代码,如下图所示 3、接下来我们编译写好的C语言文件,如下图所示 4、最后执行C语言文件,我们就可以得到1到100的阶乘之和了,如下图所示 工具\/材料 Dev C++ ...

c语言求1到100阶乘和代码
在编程领域,计算1到100的阶乘和是一个常见的练习题,它不仅有助于理解循环和变量操作,还能够检验程序处理大数值的能力。下面展示了一个使用C语言实现的解决方案:c int main() { long long fact, sum;sum = 0;for (int i = 1; i <= 100; i++) { fact = 1;for (int j = 1; j ...

c语言求1!+2!+3!+...+n!的和 我写的哪里出问题了了呢
一、按你的思路,从1到n,建立一个循环(循环变量t),然后建立一个内循环(循环变量i),用于计算t的阶乘,然后累加起来(变量sum),就可以了。思路比较清晰,但有几处错误:1、a[100]是来捣乱的吧?去掉!顺便把a[t]=t换成x=1,i<a[t]改成i<t即可。2、sum=sum+x放错位置了,你想加...

c语言。求1!+2!+3!+……+10!。要求编写求N的阶乘的函数
int i;double s=1.0;for (i=1;i<=n;i++)s=s*i;return s;} void main(){ double sum=0.0;int n,i;printf ("please input n:\\n");scanf ("%d",&n);for (i=1;i<=n;i++)sum+=hi(i);printf ("1!+2!+3!+……+n!=%0.f",sum);} 给你参考下!自己思考才有...

相似回答