| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 417 人关注过本帖
标题:一个阶乘的问题
只看楼主 加入收藏
hsbwp1314
Rank: 2
来 自:湖南长沙
等 级:论坛游民
帖 子:88
专家分:25
注 册:2008-12-1
结帖率:53.85%
收藏
 问题点数:0 回复次数:2 
一个阶乘的问题
#include <stdio.h>
#include <malloc.h>
#define MAXN 1000
void pnext(int a[],int k)
 {
  int *b,m=a[0],j,i,r,carry;
  b=(int *)malloc(sizeof(int)*(m+1));
  for(i=1;i<=m;i++) b[i]=a[i];
  for(j=1;j<k;j++)
  {
    for(carry=0,i=1;i<=m;i++)
     {
       r=(i<a[0]?a[i]+b[i]:a[i])+carry;
       a[i]=r%10;
       carry=r/10;
     }
     if(carry) a[++m]=carry;

  }
  free(b);
  a[0]=m;
 }
void write(int *a,int k)
 {
   int i;
   printf("%4d!=",k);
   for(i=a[0];i>0;i--)
    printf("%d",a[i]);
   printf("\n\n");

 }

  void main()
{
int a[MAXN],n,k;
printf("Enter the number n;");
scanf("%d",&n);
a[0]=1;
a[1]=1;
write(a,1);
for(k=2;k<=n;k++)
  {
    pnext(a,k);
    write(a,k);
    getchar();
  }
  getch();
}

问题:阶乘的计算!
   a[0]存储长整数N的M,已知4!=24,计算5!,可以对原来的24累加4次24后得到120。

运行后只能得到1!=1,2!=1,3!=1
 请问r=(i<a[0]?a[i]+b[i]:a[i])+carry;是不是有点问题,我改为r=(i<a[0]?a[i]:a[i]+b[i])+carry;后,只能得到正确的前3位的阶乘!后面的就不对了,

请高手指出其中的错误码,谢谢!
搜索更多相关主题的帖子: include write 
2008-12-04 09:34
SnakeEater
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2008-11-25
收藏
得分:0 
我加了两个标记发现
1.if (carry) {a[++m]=carry;printf("%-5d\n",carry);}
2.   for(i=a[0];i>0;i--)
    printf("%d  ",a[i]);
可见算法本身就有很多错误
不知为何楼主用如此复杂的算法,这样时间复杂度高而且会很容易出错的

Result.jpg (12.58 KB)
图片附件: 游客没有浏览图片的权限,请 登录注册
2008-12-04 13:39
hsbwp1314
Rank: 2
来 自:湖南长沙
等 级:论坛游民
帖 子:88
专家分:25
注 册:2008-12-1
收藏
得分:0 
谢谢!

其实只是一处有点错误!经过两个小时的研究终于搞定
r=(i<a[0]?a[i]+b[i]:a[i])+carry;

此处小了一个等于号:r=(i<=a[0]?a[i]+b[i]:a[i])+carry

别人问的一个题目!
2008-12-04 14:01
快速回复:一个阶乘的问题
数据加载中...
 
   



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

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