1. 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
運行效果
2. 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);
}
//運行示例:
3. 用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;
}
4. 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;
}
5. C語言 階乘求和
13
14的時候
已經超過long能表示的正數范圍了,15的時候,超過了位數(32位)的范圍了
把long
改成
long
long吧
能有8位元組
6. 【在線等】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
得出結果:
7. c語言 循環語句。階乘的和
#include<stdio.h>
intmain(){
longi,s=1,m,h=0;
for(i=1;i<=10;i++){
s*=i;
h+=s;
}
printf("the!deheis%ld ",h);
return0;
}
你的是雙重循環,是錯誤的,你這樣結果是把1!加了10次,2!加了9次,3!加了8次,以此類推,數量過大了……
只需要單個循環,把每次得到的i!加到h中去就行了,
另外,編寫習慣很重要的,記住換行,必要的東西
比如你的main函數沒有返回值,當然能編譯通過,但是會報警告。隨便寫一個就行,或者寫void
另外,long型變數佔位符是%ld
8. C語言for循環 求1--10階乘的和
首先定義兩個整形的初始值,因為C語言的變數必須是先定義後試用,而且不賦初始值的話,其變數值是不定的。(C語言是不是這么定義整形我記不清楚了,java是這樣的,如果我定義錯了,你自己改下)
int
n=1,sum=0;
for(i=1;i<=10;i++){
for(j=1;j<=i;j++){
n=n*j;//計算1到10的階乘
}
sum=sum+n;//把階乘的結果累加!
}
sum就是1到10階乘的和
9. c語言求階乘的和
這個題目有局限性的,一旦你的N值超過某個數以後,整個Sn的值就會出現溢出現象。這個程序是很好寫的,只要寫一個求一個數階乘的函數fun(int
n)然後用個循環就可以解決問題。
10. c語言階乘用循環句兩個for怎樣求和
輸入以下程序可實現兩個for求和:
#include<stdio.h>
void main()
{
int sum=0,n,m=1,i,j;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
for(j=1,m=1;j<=i;j++)
m*=j;
sum+=m;
}
printf("n的階乘=%d
",sum);
}