回 帖 发 新 帖 刷新版面

主题:[原创]大数类 hugeint

#include<iostream.h>
class hugeint
{
public:
    hugeint(int);
    hugeint(long);
    ~hugeint();
    hugeint& operator = (char*);
    friend ostream& operator << (ostream&,hugeint&);
protected:
    int *data;
    long size;
};



#include<string.h>
#include<iomanip.h>
#include "hugeint.h"
hugeint::hugeint(int n)
{
    size=(long)n/4;
    data=new int[size];
    for(long i=0;i<size;++i)data[i]=0;
}
hugeint::hugeint(long n)
{
    size=n/4;
    data=new int[size];
    for(long i=0;i<size;++i)data[i]=0;
}
hugeint::~hugeint()
{
    delete[]data;
}
hugeint& hugeint::operator = (char *str)
{
    long len=strlen(str),count=0;
    if(len>(size<<2))return *this;
    char *p=str+len-1;
    int t,i;
    while(1)
    {
        if((p-str)<4)break;
        t=0;
        char *ph=p-3;
        for(int i=0;i<4;++i)
        {
            t*=10;
            t+=ph[i]-'0';
        }
        data[count++]=t;
        p-=4;
    }
    t=0;
    for(i=0;i<=p-str;++i)
    {
        t*=10;
        t+=str[i]-'0';
    }
    data[count]=t;
    return *this;
}
ostream& operator <<(ostream& out,hugeint& a)
{
    int *p=a.data+a.size-1;
    while(!*p)--p;
    out<<*p--;
    while(p>(a.data-1))
        out<<setw(4)<<setfill('0')<<*p--;
    return out;
}




#include "hugeint.h"
void main()
{
    hugeint a(1000);
    a="451234567864512164800012300000000";
    cout<<a<<endl;
}

回复列表 (共18个回复)

11 楼

有没有人有Java的HugeInt类的源码?

12 楼

我也做了 四则都有 除法效率有点低
[url=http://hi.baidu.com/liheyuan87/blog/item/5002ce031efc9eed09fa9323.html]HugeInt大整数四则运算-HugeInt.h[/url]

[url=http://hi.baidu.com/liheyuan87/blog/item/e6d50cfaa2bc45889f514620.html]HugeInt大整数四则运算-HugeInt.cpp[/url]

[url=http://hi.baidu.com/liheyuan87/blog/item/c4d14a8dc1050713b21bba22.html]HugeInt大整数四则运算-main.cpp[/url]

13 楼

动态数组~~
temp[i][j]=(int**)malloc(m*sizeof(int*))??
这个东西吗??~~
还是直接用一维的malloc

14 楼

以前写过

[url]http://upload.programfan.com/upfile/200702261536767.rar[/url]

下面是我自己写的一段测试代码
#include "Integer.h"
#include <iostream>
using namespace toya;
using namespace std;

int main()
{
        Integer num("-1231468454545215454101256465121455412132156456415");
        cout<<num.pow(65)<<endl;
        
        cout<<num.square()<<endl;
        
        cout<<num/123<<endl;
        cout<<num%123<<endl;
        
        cout<<num.toBin()<<endl;
        cout<<num.toHex()<<endl;

        cout<<Integer::factorial(1000)<<endl;
        
        return 0;
}

15 楼

你的乘法怎么实现的?

16 楼

[quote]偶也在用C#写huge int。现在完成了加减法和大小比较。目前要解决的是乘除问题。[/quote]
[fly]
不就是重复加减吗?
[/fly]

17 楼

哈,我的阶乘已经基本完成了~~可以算10000!在1s内,还有一个优先队列没用,还可以优化,然后大数运算时的存储也是一个值得关心的问题,因为在大量重复计算的时候,存储这部分不能成为瓶颈,刚才试了一下,那个HulCale只要0.6s算40,000!,我的需要大概9s~~~

18 楼

下个周末也去试着写一个,现在国庆节都过完了,要上课咯!~

我来回复

您尚未登录,请登录后再回复。点此登录或注册