当前位置:首页 » 编程语言 » 阶乘求和程序c语言
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

阶乘求和程序c语言

发布时间: 2022-06-04 16:05:22

c语言:1到n的阶乘之和

最基础的思路,是逐个求阶乘,并累加。不过由于阶乘是从1乘到n,所以每个数都单独求一次阶乘,会有很多重复运算,影响效率。
所以更快捷的方式是,在上一个数的阶乘基础上,直接乘上本身,得到当前数的阶乘。
以此为主导,代码如下:
#include
<stdio.h>
int
main()
{
int
n,
i,
n1
=
1,s=0;
scanf("%d",&n);//输入n值。
for(i=1;
i
<=
n;
i
++)
{
n1*=i;//计算i的阶乘。
s+=n1;//累加。
}
printf("%d\n",
s);//输出结果。
}

② C语言程序 一个阶乘求和 程序

参考下把,是C++的,高精度的,把它转换为C语言的即可
#include
<iostream>
#include
<string>
using
namespace
std;
template<int
N>
struct
BigNum
{
int
d[N];
int
len;
BigNum()
{
len
=
0;
}
BigNum(const
char
*);
BigNum<N>
&
operator=(int
);
BigNum<N>
&
operator=(BigNum<N>
&
);
BigNum<N>
&
operator
*=(int);
BigNum<N>
&
operator
+=(int);
BigNum<N>
&
operator
+=(BigNum<N>
&
);
BigNum<N>
&
operator
/=(int);
int
cmp(BigNum<N>
&);
template<int
O>
friend
ostream&
operator
<<
(ostream&
,BigNum<O>&);
};
template<int
N>
BigNum<N>::BigNum(const
char
*s){
len
=
strlen(s);
int
t
=
len;
while(t){
d[len
-t]
=
s[t-1]
-'0';
t
--;
}
}
template<int
N>
BigNum<N>
&
BigNum<N>::operator=(int
n){
len
=
0;
do
{
d[len++]
=
n%10;
n
/=
10;
}
while(n>0);
return
*this;
}
template<int
N>
BigNum<N>
&
BigNum<N>::operator=(BigNum<N>
&
rhs){
len
=
rhs.len;
for(int
i=0;i<len;i++){
d[i]
=
rhs.d[i];
}
return
*this;
}
template<int
N>
BigNum<N>
&
BigNum<N>::operator
*=(int
m){
int
carry
=
0;
int
i;
for(i=0;i<len;i++){
carry
+=
d[i]
*
m;
d[i]
=
carry
%
10;
carry
/=
10;
}
while(carry){
d[len++]
=
carry
%
10;
carry
/=
10;
}
return
*this;
}
template<int
N>
BigNum<N>
&
BigNum<N>::operator
+=(int
m){
int
carry
=
0;
int
i;
carry
=
d[0]
+
m;
d[0]
=
carry%10;
carry
/=
10;
for(
i
=
1;
i
<
len
&&
carry;
i++)
{
d[i]
+=
carry%10;
carry
/=
10;
}
while(carry){
d[len++]
=
carry
%
10;
carry
/=
10;
}
return
*this;
}
template<int
N>
BigNum<N>
&
BigNum<N>::operator
+=(BigNum<N>
&
rhs){
int
i,
j,
carry
=
0;
for(
i
=
0,
j
=
0;
i
<
len
&&
j
<
rhs.len;
i
++,
j++)
{
d[i]
+=
rhs.d[i]
+
carry;
carry
=
d[i]/10;
d[i]
%=
10;
}
if(i
<
len)
{
if(carry)
{
for(;
i
<
len&&carry;
i
++){
d[i]
+=
carry;
carry
=
d[i]/10;
d[i]
%=
10;
}
}
if(carry)
d[i]
=
carry,
len
++;
}
else
if(j
<
rhs.len)
{
for(
;
j
<
rhs.len;
j
++){
d[j]
=
rhs.d[j]
+
carry;
carry
=
d[j]/10;
d[j]
%=
10;
}
if(carry)
d[j]
=
carry,
len
=
rhs.len
+1;
else
len
=
rhs.len;
}
else
{
if(carry)
d[i]
=
carry,
len++;
}
return
*this;
}
template<int
N>
BigNum<N>
&
BigNum<N>::operator
/=(int
dm){
int
carry
=
0;
int
i;
for(i=len-1;i>=0;i--){
carry
*=
10;
carry
+=
d[i];
d[i]
=
carry
/
dm;
carry
=
carry
%
dm;
}
while(d[--len]
==0){
;
}
len
++;
return
*this;
}
template<int
N>
int
BigNum<N>::cmp(BigNum<N>
&rhs){
if(len
!=
rhs.len)
return
len
-
rhs.len;
for(int
i=
len-1;i>=0;i--){
if(d[i]
!=
rhs.d[i])
return
d[i]
-
rhs.d[i];
}
return
0;
}
template<int
N>
ostream&
operator
<<
(ostream&
o,
BigNum<N>&
rhs){
for(int
i=rhs.len-1;i>=0;i--){
o
<<
rhs.d[i];
}
return
o;
}
int
main
()
{
int
i,
j,
n;
BigNum
<300>
sum,
temp;
while(
cin
>>
n)
{
for(
i
=
1;
i
<=
n;
i
++)
{
temp
=
1;
for(
j
=
1;
j
<=
i;
j
++)
temp
*=
j;
sum
+=
temp;
}
for(
i
=
sum.len-1;
i
>=
0;
i
--)
cout
<<
sum.d[i];
cout
<<
endl;
}
return
1;
}

③ 用C语言求1~20的阶乘之和!

/**
**程序描述:求求1~20的阶乘之和。
**算法思路:先求出每一项的阶乘值,然后将所有项的阶乘值相加。
*/
#include<stdio.h>
#defineN20
typedefunsignedlonglonguInt64;//自定义类型
//求出每一项阶乘值的函数
uInt64fact(intn)
{
inti;
uInt64s;
for(i=s=1;i<=n;i++)
s*=i;//从1开始循环累加相乘
returns;
}

intmain()
{
uInt64s;
inti;
for(i=1,s=0;i<=N;i++)
s+=fact(i);//从第1项开始循环累加每一项的阶乘值
printf("1!+2!+3!+……+20!=%llu ",s);
return0;
}

④ c语言阶乘求和

#include<stdio.h>
voidmain(){
inti,n,k=1,s=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
{k*=i;s+=k;}
printf("%d",s);
}

//运行示例:

⑤ 求1到20的阶乘之和的c语言程序怎么编写

#include <stdio.h>

long jiecheng(int x)

{

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 ",k);

}

(5)阶乘求和程序c语言扩展阅读:

用递归方法

#include<stdio.h>

int func(intn){

int m=0;

if(n==1){

return1;

m=n*func(n-1);

returnm;

int main(intargc,constchar*argv[]){

int sum=0;

for(inti=1;i<=20;i++)

sum=sum+func(i);

printf("%d\n",sum);

return0;

⑥ C语言怎么求n阶乘的和

1
思路
关键是写出求阶乘的函数
2
代码
#include<stdio.h>
//求阶乘
intfactorial(intn){
if(n==0||n==1)
return1;
else
returnn*factorial(n-1);
}
intmain(){
intn;
printf("求1!+2!+...+n!的结果 输入n的值:");
scanf("%d",&n);
intsum=0;
for(inti=1;i<=n;i++){
sum+=factorial(i);
}
printf("结果为:%d ",sum);
getchar();
getchar();
return0;
}
3
运行效果

⑦ 用c语言编程,求从1的阶乘一直加到20的阶乘。

1、首先打开C语言编辑器,新建一个c语言的文件,导入头文件并设置一个主函数:

⑧ 【在线等】c语言程序:对n的阶乘求和,n=1到10

分析下程序,阶乘可以用递归做,也可以用循环做,这里就放上这两种代码了。

一.递归:

#include <stdio.h>

int f(int t)

{

if (t==1)

return 1;

else

return t*f(t-1);

}

int main()

{

printf("%d ",f(10));

return 0;

}

程序分析:定义一个f函数,利用递归的特性,进行运算

10*f(9) = 10*9*f(8) …… 直到到1时返回1

得出结果:

⑨ c语言 1到20的阶乘之和

i始终大于1,会出现死循环的,同时,20的阶乘相加,那结果会很大的,用int保存不下,得用double类型!示例代码,有问题再用度娘自己搜索吧。。

//win7x64+vc6.0编译通过
#include<stdio.h>
#include"stdlib.h"
intmain()
{
doublefac(intn);
doublesum=0,m;
inti;
for(i=1;i<=20;i++)
m=fac(i);
sum+=m;
printf("%0.lf ",sum);
system("pause");
}
doublefac(intn)
{
doublem;
if(n==1)
m=1;
elsem=fac(n-1)*n;
return(m);
}