用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - c代码库

递推法

2012-11-01 作者: 程序猿style举报

[c]代码库

# include <stdio.h>
# include <malloc.h>
# define  MAXN   1000

/*问题描述:编写程序,对给定的n(n≦100),计算并输出k的阶乘k!(k=1,2,…,n)的全部有效数字。*/
void  pnext ( int a[ ],int k ) //已知a中的(k-1)!,求出k!在a中。
{
	int *b,m=a[0],i,j,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++ )  //控制累加k-1次
	{
		for ( carry=0,i=1; i<=m; i++ ) //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 ) //功能是输出累加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();
	}
}


网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...