| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1638 人关注过本帖, 1 人收藏
标题:超大数求解,怎么做啊,头都想大了
只看楼主 加入收藏
ZQDragon
Rank: 2
等 级:论坛游民
帖 子:30
专家分:39
注 册:2010-6-8
收藏
得分:0 
#include<stdio.h>
#include<time.h>
#include<windows.h>
#include<time.h>
#define N 10000
int main()
{
    long a[500000] ;
    memset(a,500000,0);/*清零*/
    a[0]=1;/*对数组a的第一位赋值1*/
     
    long i , j , k , bit=1 ;/*bit记录结果的位数*/
    clock_t cStart;
    clock_t cEnd;
    double  dDuration;
    cStart=clock();
    for(i=1;i<=N;++i)
    {
        for(j=0;j<bit;++j)
        {
            a[j]*=i;
        }
        for(j=0;j<bit;++j)
        {
            if(a[j]>=10)
            {
                k=a[j];
                a[j]=k%10;
                k/=10;
                if(j+1==bit)
                ++bit;
                a[j+1]+=k;
            }
        }
    }
    cEnd=clock();
    dDuration = (double)(cEnd - cStart) / CLOCKS_PER_SEC;
    printf("10000!=");
    for(i=bit-1;i>=0;--i)
    printf("%ld",a[i]);
    printf("\n耗时%f\n", dDuration);
    system("pause");
    return 0;
}
    顺便说声:7楼结果有错, 呵呵……
耗时:2.976000s,明显比不上10楼的 ^呵呵^
2010-06-14 01:30
ZQDragon
Rank: 2
等 级:论坛游民
帖 子:30
专家分:39
注 册:2010-6-8
收藏
得分:0 
看错了,上面我做的是10000!
1000!的阶乘是了下耗时0.02000s
比10楼快哦
2010-06-14 01:32
playmyself
Rank: 5Rank: 5
来 自:第3系4级宇宙空间
等 级:职业侠客
帖 子:76
专家分:399
注 册:2009-7-8
收藏
得分:0 
程序代码:
#define L5 100000
#include <stdio.h>
#include <time.h>
int main(void)
{
    int num[L5]={1,1}, tpnum;
    int i, j, add = 0, n;
    clock_t cStart;
    clock_t cEnd;
    double  dDuration;

    scanf("%d", &n);
    cStart=clock();   
    for(i = 2; i <= n; i++)
    {
        for(j = 1; j <= *num; j++)
        {
            tpnum  = num[j]*i + add;
            num[j] = tpnum % L5;
            add    = tpnum / L5;
        }
        while(add)
        {
            num[++(*num)] = add % L5;
            add /= L5;
        }
    }
    cEnd=clock();
    dDuration = (double)(cEnd - cStart) / CLOCKS_PER_SEC;
    printf("\n耗时%f\n", dDuration);
//    printf("%d", num[(*num)--]);
//    for(;*num>0;--*num)
//        printf("%05d",num[*num]);
}
翻了下原来的,借用下上面的表,输入1000大约是0.005s
10000大约是0.5左右
100000捂脸。。

无聊创造奇迹。
2010-06-14 10:36
ZQDragon
Rank: 2
等 级:论坛游民
帖 子:30
专家分:39
注 册:2010-6-8
收藏
得分:0 
强。。
2010-06-14 12:17
firekiller
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2009-9-5
收藏
得分:0 
搞了半天总算懂LZ的意思咯。是用下面685*9的方法算100000!

看下上面的代码
2010-06-14 21:05
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
2010-06-15 11:01
死了都要C
Rank: 4
来 自:四川成都
等 级:贵宾
威 望:13
帖 子:1582
专家分:116
注 册:2006-12-7
收藏
得分:0 
我忘了那个什么···4杭代码就解决了10000!的代码了··

女施主``我给你``送茶来了```师太``你就从了老衲吧``
代码本天成~~~妙头偶得之```
2010-06-15 12:41
huxiangwenhu
Rank: 4
等 级:业余侠客
威 望:1
帖 子:191
专家分:262
注 册:2010-6-1
收藏
得分:0 
都是高手!!!我顶
2010-06-16 21:19
快速回复:超大数求解,怎么做啊,头都想大了
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.044798 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved