① 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);
}