qinzhenhua 发表于 2006-11-11 17:05:31

有谁知道100的阶乘怎么算?

最近,有人问我这个问题,发现用TUB C++,没有办法运算,因为这个数值超过了解10的120次方.
希望能有人可以求解.

jianwu 发表于 2006-11-11 19:17:19

回复 #1 qinzhenhua 的帖子

哎~~我是初学者~不懂哦

48328595 发表于 2006-11-12 21:35:42

阶乘~~都不知道什么意思,数学太差

zkkpkk 发表于 2006-11-14 20:08:04

和朋友一起出去聚餐,花去 214 思明论坛!

   下次努力哦!……这个没做过,倒是在计算超长整数相加的时候是有个方法是用链表存,一个结点存4位,符合我国的表示法,还有就是string模拟,希望能给你启示

guang5930 发表于 2006-11-22 09:21:18

你参与思明论坛的广告设计得到 430 思明论坛的佣金!

   下次努力哦!……用数组方法,一个数组存一个数总会够大了吧

zkkpkk 发表于 2006-11-22 16:17:19

用string模拟11111111111

48328595 发表于 2006-12-2 11:06:58

#include<iostream>
int main()
{
    using namespace std;
    cout<<"----------ren----------"<<endl;
    int i;
        double m;
    m=1.0;
    i=100;
    for(i;i>=1;i--)
    {
                m=m*i;
    }
    cout<<m<<endl;
        char aoo;
    cin>>aoo;
    return 0;
}

双精浮点数就OK了~

zkkpkk 发表于 2006-12-9 15:16:36

双精度太长会变成科学记数法,如果不要科学记数法呢

48328595 发表于 2006-12-10 10:30:57

不好意思,小偷又光顾你家,带走了你 10% 的财产!(人民政府再次提醒大家有钱要存银行)

   下次努力哦!……难道cout<<m/1000000<<m%1000000;这样???

48328595 发表于 2006-12-10 10:31:43

上面用单精试下:hug:

zkkpkk 发表于 2006-12-11 19:30:02

不是,是能不能像有人用string模拟笔算实现超长整数加减程除,我只会用链表做加减,但是链表可以动态分配所以理论上可以实现任何长度的整数相加

wutugu 发表于 2007-1-22 21:10:16

#include <iostream.h>
#include <conio.h>
#include <malloc.h>
const int N = 1000;
void next(int a[],int n)
{
    if(n==1 || n==0)
    {
      a = 1;
      a = 1;
      return;
    }
    int k = a;
    int *b = (int *)malloc(sizeof(int) * (k+1));
    int temp = 0;
    int c = 0;
    for(int i=1;i<=k;i++)
    {
      b = a;
    }
    for(i=1;i<n;i++)
    {
      temp = 0;
      c = 0;
      for(int j=1;j<=k;j++)
      {
            temp = (j<=a?a+b:a) + c;
            c = temp / 10;
            a = temp % 10;
      }
      if(c>0)
      {
            a[++k] = c;
      }
    }
    free(b);
    a = k;
}

void write(int *a, int k)
{
    cout << k << "! = ";
    for(int i=a;i>0;i--)
    {
      cout << a;
    }
    cout << endl;
}

void main()
{
    clrscr();
    int a;
    int n;
    cout << "Enter the number n:";
    cin >> n;
    if(n<0)
    {
      cout << "Error!" << endl;
      return;
    }
    for(int k=0; k<=n; k++)
    {
      next(a,k);
    }
    write(a,n);
}
使用数组存放各个数字
使用递推法计算
例如:知道5!,6!=6个5!相加

[ 本帖最后由 wutugu 于 2007-1-22 21:13 编辑 ]

zkkpkk 发表于 2007-4-9 17:50:40

今天发放了上月的奖金 1028 思明论坛!

   下次努力哦!……用STRING型的数组好一点
页: [1]
查看完整版本: 有谁知道100的阶乘怎么算?