标题:请好友帮忙看下,给我一个答案
只看楼主
夏851773277
Rank: 1
等 级:新手上路
帖 子:48
专家分:6
注 册:2011-4-18
结帖率:50%
已结贴  问题点数:20 回复次数:10 
请好友帮忙看下,给我一个答案
怎样编写如下程序
输入一个n,求1!+2!+3!.......n!。注意(n小于20)
搜索更多相关主题的帖子: 好友 答案 
2011-04-18 22:34
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
得分:10 
程序代码:
root@~ #cat jc.c
#include <stdio.h>

int main (void) {

        int n,i;
        long int sum=0;
        long int jc (int n);

        printf ("Enter a digit:");
        scanf ("%i",&n);

        if (n<1||n>20) { printf ("Out of rang !\n");return 1; }

        for(i=0;i<n;i++) { sum+=jc(i); }

        printf ("sum is %li\n",sum);

        return 0;

}

long int jc (int n) {
        long int result;
        if(n==0) return result=1;
        else return result=n*jc(n-1);
}
root@~ #

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-04-18 22:45
夏851773277
Rank: 1
等 级:新手上路
帖 子:48
专家分:6
注 册:2011-4-18
得分:0 
好像有点不对呀
2011-04-18 23:19
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
得分:0 
程序代码:
#include <stdio.h>

int main (void) {

        int n,i;
        long int sum=0;
        long int jc (int n);

        printf ("Enter a digit:");
        scanf ("%i",&n);

        if (n<1||n>20) { printf ("Out of rang !\n");return 1; }

        for(i=1;i<=n;i++) { sum+=jc(i); }

        printf ("sum is %li\n",sum);

        return 0;

}

long int jc (int n) {
        long int result;
        if(n==0) return result=1;
        else return result=n*jc(n-1);
}

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-04-18 23:24
夏851773277
Rank: 1
等 级:新手上路
帖 子:48
专家分:6
注 册:2011-4-18
得分:0 
你要是输入的数据大了,它就会出现一个负数,比如你输入19,它就会输出一个负数
2011-04-18 23:33
岳三路
Rank: 2
等 级:论坛游民
帖 子:23
专家分:19
注 册:2011-3-30
得分:5 
#include <stdio.h>
main()
{
  int i=1,n;
  long p=1;
  printf("Please enter the integer:n");
  scanf("%d",&n);
  while (i<n)
  {
     i=i+1;
     p=p*i;
  }
  printf("%d!=%ld\n",i,p);
}
这个你试试。。
2011-04-18 23:35
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
得分:0 
以下是引用夏851773277在2011-4-18 23:33:22的发言:

你要是输入的数据大了,它就会出现一个负数,比如你输入19,它就会输出一个负数

加个long,再试一试
root@~ #cat jc.c
#include <stdio.h>

int main (void) {

        int n,i;
        long long int sum=0;
        long long int jc (int n);


        printf ("Enter a digit:");
        scanf ("%i",&n);

        if (n<1||n>20) { printf ("Out of rang !\n");return 1; }

        for(i=1;i<=n;i++) { sum+=jc(i); }

        printf ("sum is %lli\n",sum);

        return 0;

}

long long int jc (int n) {
        long long int result;

        if(n==0) return result=1;
        else return result=n*jc(n-1);
}
root@~ #

[ 本帖最后由 ansic 于 2011-4-18 23:38 编辑 ]

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-04-18 23:36
岳三路
Rank: 2
等 级:论坛游民
帖 子:23
专家分:19
注 册:2011-3-30
得分:5 
上面我的那个是求n!的程序。。你再试试这个C程序,。。
#include <stdio.h>
void main()
{
   int i=1,a=1,n;
   long p=0;
   printf("please enter the number:n");
   scanf("%d",&n);
   if(n>=20)
    printf("The number is too large\n");
   else
   {
     while (i<=n)
     { a=a*i;
       i=i+1;
       p=p+a;
     }
     printf("%d!=%ld\n",n,p);
   }
}
这个我调试过了,应该没问题的。。
2011-04-18 23:50
夏851773277
Rank: 1
等 级:新手上路
帖 子:48
专家分:6
注 册:2011-4-18
得分:0 
六楼,八楼好友还是出现了同样的错误,数数据太大,还是会出现负数,至于七楼好友那样定义长整型数据,是不合法的,我记得好像听我们老师说过,这种数据要定义为int_64型,不过具体不知道怎么搞呀
2011-04-19 11:18
夏851773277
Rank: 1
等 级:新手上路
帖 子:48
专家分:6
注 册:2011-4-18
得分:0 
各位楼上好友,小弟刚百度了一下,知道了__int64的用法,所以此程序可为
#include <iostream>
using namespace std ;
int main()
{__int64 s=1,sum=0;
int i,n;
cin>>n;
for(i=1;i<=n;i++)
{s=s*i;sum=sum+s;}
cout<<sum;}
还是谢谢大家了
2011-04-19 12:08



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-337156-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.570048 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved