用c语言编写50的阶乘的算法

如题所述

#include<stdio.h>
#define N 50 /*可以是任意一个数的阶乘,当然要计算机能够存的下*/

int main()
{
int a[100], l=0, i, j;
for(i=0; i<100; i++)
a[i]=0;
a[0]=1;

for(i=2; i<=N; i++)
{
for(j=0; j<=l; j++)
a[j] *= i;
l+=3;
for(j=0; j<l; j++)
if(a[j]>9)
{
a[j+1]+=a[j]/10;
a[j] %=10;
}
while(a[l]==0) l--;
}

for(i=l; i>=0; i--)
printf("%d", a[i]);
printf("\n");
}

看了 楼下两个 用int 存储 50!
感觉有点不可思议, 至少应该用double啊,用double虽然不能保证精度,但至少可以很接近结果。

3楼的 一句话:“老师说过,可以自已定义一个类型来表示更大的数。。。”

自己是可以定义,你可以定义任意类型。只不过需要你自己来实现。 50!这种问题 就相当于 大数 的操作。
网上可以下载到大树类, 支持 大数的+ - * / 开平方, 开根号,(几乎所有math里的函数)...。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-03-01
算法很简单,就用一个递归就可以了,实现函数如下:
//求n的阶乘的函数
int fun(int n)
{
if(0==n || 1==n) return 1;
else return n*fun(n-1);
}

这里涉及到数据类型范围的问题,用int型最多只能表示13的阶乖。再多一个就会超出范围了。记得老师说过,可以自已定义一个类型来表示更大的数。。。等我再研究研究。
这里写了个用int型的测试代码,一块放上来:

//用c语言编写50的阶乘的算法

#include "stdio.h"
#include "windows.h"

//求n的阶乘的函数
int fun(int n)
{
if(0==n || 1==n) return 1;
else return n*fun(n-1);
}

void main()
{
int i;
int a;
for(i=1;i<=15;i++)
{
a = fun(i);
printf("%d %d\n",i,a);
Sleep(100);
}
}
第2个回答  2008-03-01
#include <stdio.h>
#include <iostream.h>

void Func(int num)

{
int sum=0;
for (int i=1;i<=num;i++)
{
sum=i*50;

printf("%d * 50 = %d\n",i,sum);

}
}

void main()

{
int a;
printf("输入整数:");
cin >> a;
Func(a);
}

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网