注册 登录
编程论坛 C++教室

新手,问题。

暴风 发布于 2007-06-26 22:00, 1060 次点击

我想求1!+2!+3!+..+12!的和。
#include <iostream>

using namespace std;

int main()
{
int a=1,sum=0,b=0;
for(int i=1;i<=12;++i)
{ for(int b=i;b>1;--b)
{
a=b*(b-1);

}
sum=sum+a;
cout<<sum<<endl;
}

system("PAUSE");

}
可结果却是
1
3
5
7
9
11
13
15
17
19
21
23
我想了半天也想不出是哪里出错了,
请前辈求教呀!

12 回复
#2
游乐园2007-06-26 22:08

#include<iostream>
using namespace std;


int main()
{
int sum,result=0;
for(int i=1;i<=12; ++i)
{
  for(int j=1,sum=1;j<=i; ++j) sum*=j;
  result+=sum;
}
cout<<result<<endl;
return 0;
}

#3
暴风2007-06-27 08:32

不对呀,你的程序的结果是

52445232

可结果不是应该是
522956313吗

#4
kaikai199582007-07-15 09:02
#include<iostream>
using namespace std;
void main()
{
int i,j,a=1,sum=0;
for(i=1;i<=12;i++)
{
for(j=1;j<=i;j++)
{
a*=j;
cout<<a<<endl;
}
sum+=a;
a=1;
}
cout<<sum<<endl;
}
试试这个...
#5
kaikai199582007-07-15 09:03
程序中间cout&lt;&lt;a&lt;&lt;endl;多余!删了它
#6
夜魔神2007-07-15 15:32

int k=1,j,i;
for(i=1;i<=12;i++)
{
for(j=1,sum=1;j<=i;j++)
{
sum=sum*j;
}
k=sum+k;
}
cout<<k<<endl;

#7
HJin2007-07-15 16:44
回复:(暴风)新手,问题。

/*---------------------------------------------------------------------------
File name: sumOfFactorials.cpp
Author: HJin (email: fish_sea_bird [at] yahoo [dot] com )
Created on: 7/15/2007 02:23:48
Environment: Windows XP Professional SP2 English +
Visual Studio 2005 v8.0.50727.762

我想求1!+2!+3!+..+n!, n = 12。

(n> 12 will overflow the 32-bit integers.)

Output:

1 1 1
2 3 3
3 9 9
4 33 33
5 153 153
6 873 873
7 5913 5913
8 46233 46233
9 409113 409113
10 4037913 4037913
11 43954713 43954713
12 522956313 522956313
Press any key to continue . . .

*/

#include <iostream>
using namespace std;

/** version 1 --- one of the best algorithms.

O(1) space + O(n) time.
*/
int sumOfFactorials(int n);

/** version 2
O(n) space + O(n) time.

Thus, version 1 is better.
*/
int sumOfFactorials2(int n);

int main()
{
for(int i=1; i<=12; ++i)
{
cout<<i<<"\t"<<sumOfFactorials(i)<<"\t\t"<<sumOfFactorials2(i)<<endl;
}

return 0;
}

int sumOfFactorials(int n)
{
int currFactorial = 1;
int currSum = 1;
int k;

for( k = 2; k<=n; ++k)
{
currFactorial *= k;
currSum += currFactorial;
}

return currSum;
}

int sumOfFactorials2(int n)
{
if(n<1)
{
return 1;
}

int *factorials = new int[n];
int i;

factorials[0] = 1;
for(i=1; i<n; ++i)
{
factorials[i] = (i+1) * factorials[i-1];
}

for(i=0; i<n-1; ++i)
{
factorials[n-1] += factorials[i];
}

// use i to store the result
i = factorials[n-1];

delete [] factorials;

return i;
}

[此贴子已经被作者于2007-7-15 17:40:10编辑过]

#8
孤魂居士2007-07-16 10:47
#9
piaohai092007-07-16 17:00

你的输出是不是要放到下面的那个大括号里面,我也是新手!!

#10
野比2007-07-16 19:14
呵呵, HJin的代码还是那么正规..
#11
野比2007-07-16 19:15
呵呵, HJin的代码还是那么正规..
#12
げ訾澐み2007-07-19 17:07

#include <iostream>

using namespace std;

int main()
{
int sum=0,k=1 ;
for(int i=1;i<=12;++i)
{
int b=i;
if(b>1)


{ k*=b;


sum=sum+k;}
else
sum=sum;

}
cout<<sum<<endl;

return 0;

}
这个应该是对的你试试,你的那个乘的错了 ,

[此贴子已经被作者于2007-7-24 14:17:52编辑过]

#13
げ訾澐み2007-07-19 17:09
那个else
sum=sum 可以不要!!
不好意思新手
1