主题:一个想了3天3夜没想出来的问题
缄默已久
[专家分:0] 发布于 2005-06-06 12:18:00
[em10]这个问题就是怎么编程算出1到100的阶乘?那为老师能告诉我该怎么实现么?[em18]
回复列表 (共27个回复)
21 楼
vcacm [专家分:1500] 发布于 2007-04-29 21:46:00
就用小学生的方法去做,此时你只需要用一维数组去"摸拟"即可!
我简单讲一下:
[code]
算法如下:
void compute ( int n )
{
int i,j,k,index = 0 ;//index 用来进位,以及计算结果的最终位数
int a[MAX]={0} ;
a[0] = 1 ; //初始值
for( i = 1 ; i<= n ; i++ )
{
for(j= 0 ; j<= index ; j++)
a[j] *= i ; // 模拟笔算(小学生的方法)
for(k = 0 ; k<= index ; k ++ )
if ( a[k] >= 10 ) // 进位处理
{
if ( a[index] >= 10 ) // 增加位数
++ index ;
a[k+1] = a[k] / 10 ; // 懑10进1
a[k] %= 10 ;
}
}
for(k=index ; i>= 0 ; k-- )
printf("%d",a[k] ) ;//output the result
}
//算了吧!主函数我也写一下
int main(void)
{
int n ,t;
scanf("%d",&n ) ;
#if compute (100)
compute ( n ) ;
// 如果是要计算1-100
//就改为: for ( t= 1 ; t<= 100 ; t ++ ) compute(t ) ;
#else
for(t=1 ; t<= 100 ; t++)
compute(t) ;
#endif
return 0 ;
}
[/code]
22 楼
田野 [专家分:320] 发布于 2007-05-02 01:15:00
今天没有事情,我想想,吧,
23 楼
田野 [专家分:320] 发布于 2007-05-02 02:25:00
/*求100阶乘*/
/*用数组的方法,用一个位乘结果,所以最大为100*9=900》256,所以,得用INT型 */
/* 25648*125=8*125+4*125*10+6*125*100+5*125*1000+2*125*10000 */
#include <stdio.h>
#define size 300
#define N 100
void main()
{
int i;
int j; /*结果下标*/
int n;
int s[size]; /*存储结果*/
int tail; /*用于存储进位*/
int temp; /*用于数位相乘时临时值*/
/*初始化*/
printf("\n please enter a nuber :");
scanf("%d",&n);
printf("\n%d \n",n);
for(j=0;j<size;j++)
{
s[j]=0;
}
s[0]=1;
/*主体*/
for(i=1;i<=n;i++)
{
tail=0;
for(j=0;j<size;j++) /*此括号中为每一位(100以内)与结果的一位(9以内)相乘*/
{
temp=s[j]*i+tail; /*一位相乘结果*/
s[j]=temp%10; /*余数*/
tail=temp/10; /*进数*/
}
}
/*输出*/
j=size-1;
while(s[j]==0)j--;
for(;j>=0;j--)
{
printf("%d",s[j]);
}
getch();
}
24 楼
田野 [专家分:320] 发布于 2007-05-02 02:29:00
晕,还没有看呢,这么多人帮忙啊,本来以为没有人写想帮个忙的,早知道这么多人回我就不写了,花了我个把小时呢,不要见笑,写得不好,呵,验证过了,没有错
25 楼
w_b_d [专家分:50] 发布于 2007-05-02 21:25:00
大数相乘 差不多
26 楼
wuliaolll [专家分:90] 发布于 2007-05-04 17:03:00
这个似乎没那么简单吧,数字早就溢出了,精度不够,单纯的计算100的阶层的方法,都会,编程算出有难度吧
27 楼
勇气les [专家分:0] 发布于 2007-05-07 15:19:00
高精度。。。。
我来回复