找回密码
 入驻
搜索
查看: 545840|回复: 12

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

[复制链接]
发表于 2006-11-11 17:05:31 | 显示全部楼层 |阅读模式
最近,有人问我这个问题,发现用TUB C++,没有办法运算,因为这个数值超过了解10的120次方.
希望能有人可以求解.
发表于 2006-11-11 19:17:19 | 显示全部楼层

回复 #1 qinzhenhua 的帖子

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

使用道具 举报

发表于 2006-11-12 21:35:42 | 显示全部楼层
阶乘~~都不知道什么意思,数学太差
回复

使用道具 举报

发表于 2006-11-14 20:08:04 | 显示全部楼层
和朋友一起出去聚餐,花去 214 思明论坛!

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

使用道具 举报

发表于 2006-11-22 09:21:18 | 显示全部楼层
你参与思明论坛的广告设计得到 430 思明论坛的佣金!

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

使用道具 举报

发表于 2006-11-22 16:17:19 | 显示全部楼层
用string模拟11111111111
回复

使用道具 举报

发表于 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了~
回复

使用道具 举报

发表于 2006-12-9 15:16:36 | 显示全部楼层
双精度太长会变成科学记数法,如果不要科学记数法呢
回复

使用道具 举报

发表于 2006-12-10 10:30:57 | 显示全部楼层
不好意思,小偷又光顾你家,带走了你 10% 的财产!(人民政府再次提醒大家有钱要存银行)

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

使用道具 举报

发表于 2006-12-10 10:31:43 | 显示全部楼层
上面用单精试下:hug:
回复

使用道具 举报

发表于 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[0] = 1;
        a[1] = 1;
        return;
    }
    int k = a[0];
    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[0]?a[j]+b[j]:a[j]) + c;
            c = temp / 10;
            a[j] = temp % 10;
        }
        if(c>0)
        {
            a[++k] = c;
        }
    }
    free(b);
    a[0] = k;
}

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

void main()
{
    clrscr();
    int a[N];
    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 编辑 ]
回复

使用道具 举报

发表于 2007-4-9 17:50:40 | 显示全部楼层
今天发放了上月的奖金 1028 思明论坛!

   下次努力哦!……
用STRING型的数组好一点
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 入驻

本版积分规则

QQ|Archiver|手机版|小黑屋|思明论坛

GMT+8, 2024-11-16 21:41 , Processed in 0.022752 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表