黑马程序员技术交流社区
标题: 阶乘和的问题还有别的解决方法吗? [打印本页]
作者: 花短裤的夏天 时间: 2015-4-14 23:50
标题: 阶乘和的问题还有别的解决方法吗?
题目:
编写一个函数int pieAdd(int n),计算1!+2!+3!+……+n!的值(n>=1)。
比如pieAdd(3)的返回值是1! + 2! + 3! = 1 + 1*2 + 1*2*3 = 9
我的答案太复杂了,如下
<
#include <stdio.h>
int ji;
int result(int n){
if (n==1) {
ji=1;
}else{
ji=result(n-1)*n;
}
return ji;
}
int he;
int sum(n){
if (n==1) {
he=1;
}else{
he=sum(n-1)+result(n);
}
return he;
}
//sum(n)=sum(n-1)+result(n)
int main(int argc, const char * argv[]) {
he=sum(4);
printf("%d\n",he);
return 0;
}
>
除了老师给的答案,大家还有别的简便的方法吗?
作者: senheima 时间: 2015-4-14 23:53
#include <stdio.h>
int pieAdd(int n);
int sum = 1,sum2=0;
int main()
{
pieAdd(4);
return 0;
}
int pieAdd(int n)
{
for (int j=1; j<=n; j++)
{
// printf("sum%d\n",sum);
sum=1;
for (int i=1; i<=j; i++)
{
sum=sum*i;
}
sum2+=sum;
printf("sum2:%d\n",sum2);
}
return 0;
}
作者: bieny 时间: 2015-4-14 23:53
我的是阶乘- int a;
- int pieAdd(int n)
- {
-
- if(n==1)
- {
- return 1;
- }else{
- a=pieAdd(n-1)*n;
- }
- return a;
- }
-
- int main()
- {
- int b=1;
- for (int i=1; i<=4; i++) {
- pieAdd(i);
- b+=a;
- }
-
- printf("%d\n",b);
- return 0;
- }
复制代码
作者: 丶浩浩丶 时间: 2015-4-14 23:55
- #include <stdio.h>
- int pieAdd(int n);
- int main(int argc, const char * argv[])
- {
-
- int s = pieAdd(5);
-
- printf("%d\n",s);
-
- return 0;
- }
- int pieAdd(int n)
- {
- int ji = 1;
-
- int sum = 0;
-
- for (int i = 1; i<=n; i++)
- {
- ji = ji * i;
- sum = ji + sum;
- }
- return sum;
- }
复制代码
作者: 老树 时间: 2015-4-15 00:03
//3.while循环
#include <stdio.h>
int main()
{
int n=0;
printf("请输入:\n");
scanf("%d",&n);
int sum=0;//总和
int count=1;//次数
int pieMulti=1;
while (count<=n) {
sum+=pieMulti;
count++;
pieMulti=pieMulti*count;
}
printf("%d\n",sum);
return 0;
}
作者: 泡沫小精灵 时间: 2015-4-15 00:04
还可以用for循环实现
作者: yesha 时间: 2015-4-15 00:17
int pieAdd(int n);
int main(){
int x;
printf("请输入一个正整数:\n");
scanf("%d",&x);
int sum = pieAdd(x);
printf("! + 2! + 3! = %d\n",sum);
}
int pieAdd(int n){
if (n<1) return 0;
int sum = 0;
int ji=1;
for (int j=1; j<=n; j++) {
ji*=j;
sum+=ji;
}
return sum;
}
如果是递归,需要先做一个加法函数和一个乘法函数,然后再在主函数内套用,那样也可以实现,递归还没有研究出来!
作者: yesha 时间: 2015-4-15 00:18
第二个方法是函数嵌套调用,第三个是递归没做出来
作者: oucding 时间: 2015-4-15 00:27
#include <stdio.h>
int pieAdd(int n){
int temp = 1;
int result = 0;
for (int i = n; i >= 1; i--, temp = 1) {
for (int j = i; j >= 1 ; j--) {
temp *= j;
}
result += temp;
}
return result;
}
int main(){
printf("结果为%d\n", pieAdd(5));
return 0;
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |