免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234
最近访问板块 发新帖
楼主: funnyt
打印 上一主题 下一主题

[算法] 求解大数分解的有效率的算法?? [复制链接]

论坛徽章:
0
31 [报告]
发表于 2006-07-25 12:50 |只看该作者
/********************************************************************
程序功能:得出 da/db 的一千位小数
          在一定的数范围内可以使用da[]={123456};的方式
          大数范围内使用da[]={1,2,3,4,5,6};(推荐使用)
                  参与过程中不要参进小数位
                  如:0.01234  -->  1234
                      12.34    -->  1234
                  小数位过后自己添加
************************************************************************/
#include "stdio.h"
int division(int da[],int db[])
{
        int c[1000]={0},ic=0,k,flag=1;
        for(int i=100;i>=0;i--)
                if(da[i])break;
        for(int j=100;j>=0;j--)
                if(db[j])break;

        while(ic<1000 && flag)
        {
                da[ic+1]+=da[ic]*10;
                da[ic]=0;
                while(da[ic+1]>db[0]){
                        for(k=j;k>=0;k--){
                                da[k+ic+1]-=db[k];
                            if(da[k+ic+1]<0)
                                    da[k+ic+1]+=10,
                                    da[k+ic]-=1;
                        }       
                        c[ic]++;
                }
                if(da[ic+1]==db[0])
                        for(k=0;da[ic+1+k]==db[k];k++)
                                if(k==i+j+3){
                                        c[ic]++;flag=0;break;}
                ic++;
        }
        if(ic==1)
        {
                printf("%d",c[0]/10);
                return 0;
        }
        for(i=ic-1;i>0;i--)
                if(c[i]>=10)
                        c[i-1]+=c[i]/10,
                        c[i]%=10;
        for(i=0;i<ic;i++)
                printf("%d",c[i]);
}
main()
{
        int da[2000]={1,8,5,3,8,7,6,6,6,6,4,4,5,1,3,4,7,9,0,1,7,2,6,3,1,6,2,9,8,2,4};//
        int db[2000]={1,4,7,5,7,3,9,5,2,5,8,9,6,7,6,4,1,2,9,2,8};
        division(da,db);
        printf("\n");
}

论坛徽章:
0
32 [报告]
发表于 2006-07-25 13:53 |只看该作者
建议楼上看看别人怎么写大数运算的,这种大数计算已经有很多人写过了,效率也比较起来更好,不用再自己造轮子吧。

论坛徽章:
0
33 [报告]
发表于 2006-07-25 13:55 |只看该作者
原帖由 hot_ice 于 2006-7-25 08:46 发表
jdk 有个BigInteger.java


即使有也是不用的,它能处理10000digit的大数吗,有c快吗,科学计算一般不用java插手,计算从来不是java的长处。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP