首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

100分帮小弟我改个输入方式

2012-03-02 
100分帮我改个输入方式找了一个大数的程序,分析了一下,想把输入改成键盘输入,试了几种方法没成功,没思路了

100分帮我改个输入方式
找了一个大数的程序,分析了一下,想把输入改成键盘输入,试了几种方法没成功,没思路了,可能是程序没看懂,哪位帮我改改:
hugeint.h文件
#include <iostream.h>
class   hugeint
{
public:
        hugeint(int);
        hugeint(long);
        hugeint(hugeint&);
        ~hugeint();
        inline   long   getsize(){return   size;};
        inline   int   elem(long   index){return   data[index];};
        hugeint&   operator   =   (char*);
        hugeint&   operator   =   (hugeint&);        
protected:
        void   inverse();
        void   clear();
        int   inc();
        int   *data;
        long   size;
//friends:
        friend   ostream&   operator   < <   (ostream&,hugeint&);
        friend   hugeint   operator   +   (hugeint&,hugeint&);
        friend   hugeint   operator   -   (hugeint&,hugeint&);
        friend   hugeint   operator   *   (hugeint&,hugeint&);
        friend   hugeint   operator   /   (hugeint&,hugeint&);
        friend   hugeint   operator   %   (hugeint&,hugeint&);
        friend   int   add(hugeint&,hugeint&,int,int   bitm=0);
        friend   int   mul(hugeint&,int);
        friend   int   div(hugeint&,hugeint&,hugeint&,hugeint&);
};
hugeint.cpp文件
#include <string.h>
#include <iomanip.h>
#include   "hugeint.h "
#define   ERRORMSG   "Over   Flow! "
//public:
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(hugeint&   a)
{
        size=a.getsize();
        data=new   int[size];
        for(long   i=0;i <size;++i)data[i]=a.elem(i);
}
hugeint::~hugeint()
{
        delete[]data;
}
//protected:

void   hugeint::inverse()
{
        for(long   i=0;i <size;++i)data[i]=9999-data[i];
}
void   hugeint::clear()
{
        for(long   i=0;i <size;++i)data[i]=0;
}
int   hugeint::inc()
{
        int   s=1;
        for(long   i=0;s&&i <size;++i)
        {
                int   t=data[i]+s;
                data[i]=t%10000;


                s=t/10000;
        }
        if(s)return   -1;
        return   0;
}
//friends:
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;
}
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;
}
hugeint&   hugeint::operator   =   (hugeint&   a)
{
        if(size!=a.getsize())return   *this;
        for(long   i=0;i <size;++i)data[i]=a.elem(i);
        return   *this;
}
hugeint   operator   +(hugeint&   a,hugeint&   b)
{
        hugeint   temp=a;
        if(add(temp,b,0))
                cerr < <ERRORMSG < <endl;
        return   temp;
}
hugeint   operator   -(hugeint&   a,hugeint&   b)
{
        hugeint   temp1=a,temp2=b;
        temp2.inverse();
        add(temp1,temp2,1);
        return   temp1;
}
hugeint   operator   *(hugeint&   a,hugeint&   b)
{
        hugeint   temp1=a,temp2=temp1;
        temp1.clear();
        for(long   i=0;i <b.size;++i)


        {
                temp2=a;
                mul(temp2,b.data[i]);
                add(temp1,temp2,0,i);
        }
        return   temp1;
}
hugeint   operator   /(hugeint&   a,hugeint&   b)
{
        hugeint   stemp=a,rtemp=a;
        if(div(a,b,stemp,rtemp))
                cerr < <ERRORMSG < <endl;
        return   stemp;
}
hugeint   operator   %(hugeint&   a,hugeint&   b)
{
        hugeint   stemp=a,rtemp=a;
        if(div(a,b,stemp,rtemp))
                cerr < <ERRORMSG < <endl;
        return   rtemp;
}
int   add(hugeint&   a,hugeint&   b,int   s,int   bitm)
{
        long   size;
        if((size=a.size)!=b.size)return   -2;
        for(long   i=bitm;i <size;++i)
        {
                int   t=a.data[i]+b.data[i-bitm]+s;
                a.data[i]=t%10000;
                s=t/10000;
        }
        if(s)return   -1;
        return   0;
}
int   mul(hugeint&   a,int   n)
{
        int   s=0;
        for(long   i=0;i <a.size;++i)
        {
                long   t=a.data[i]*n+s;
                a.data[i]=t%10000;
                s=t/10000;
        }
        if(s)return   -1;
        return   0;
}
int   div(hugeint&   a,hugeint&   b,hugeint&   s,hugeint&   r)//s=a/b,r=a%b
{
        hugeint   temp1=a,temp2=b,temp3=a;
        s.clear();
        while(1)
        {
                temp2=b;
                temp2.inverse();
                temp3=temp1;
                if(!add(temp1,temp2,1))break;
                if(s.inc())return   -1;
        }
        r=temp3;
        return   0;
}
main.cpp文件
#include   "hugeint.h "
#define   N   1000
void   main()
{
        hugeint   a(N);
        hugeint   b=a,c=a;
        a= "300000000 ";
        b= "123432543 ";
        cout < <a+b < <endl


                < <a-b < <endl
                < <a*b < <endl
                < <a/b < <endl
                < <a%b < <endl;
}


[解决办法]
重载operator> >
[解决办法]
friend istream& operator > > (istream& in,hugeint& hint)
{
char temp[100];
in> > temp;
hint = temp;
return in;
}
[解决办法]
利用楼上的代码
给个全的
为了方便都弄到一个文件里^-^
//hugeint.h文件
#include <iostream.h>
class hugeint
{
public:
hugeint(int);
hugeint(long);
hugeint(hugeint&);
~hugeint();
inline long getsize(){return size;};
inline int elem(long index){return data[index];};
hugeint& operator = (char*);
hugeint& operator = (hugeint&);
protected:
void inverse();
void clear();
int inc();
int *data;
long size;
//friends:
friend ostream& operator < < (ostream&,hugeint&);
friend istream& operator > > (istream& in,hugeint& hint);
friend hugeint operator + (hugeint&,hugeint&);
friend hugeint operator - (hugeint&,hugeint&);
friend hugeint operator * (hugeint&,hugeint&);
friend hugeint operator / (hugeint&,hugeint&);
friend hugeint operator % (hugeint&,hugeint&);
friend int add(hugeint&,hugeint&,int,int bitm=0);
friend int mul(hugeint&,int);
friend int div(hugeint&,hugeint&,hugeint&,hugeint&);
};
//hugeint.cpp文件
#include <string.h>
#include <iomanip.h>
//#include "hugeint.h "
#define ERRORMSG "Over Flow! "
//public:
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(hugeint& a)
{
size=a.getsize();
data=new int[size];
for(long i=0;i <size;++i)data[i]=a.elem(i);
}
hugeint::~hugeint()
{
delete[]data;
}
//protected:

void hugeint::inverse()
{
for(long i=0;i <size;++i)data[i]=9999-data[i];
}
void hugeint::clear()
{
for(long i=0;i <size;++i)data[i]=0;
}
int hugeint::inc()
{
int s=1;
for(long i=0;s&&i <size;++i)
{
int t=data[i]+s;
data[i]=t%10000;
s=t/10000;
}
if(s)return -1;
return 0;
}
//friends:
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;
}
//重载> >
istream& operator > > (istream& in,hugeint& hint)
{
char temp[100];
in> > temp;
hint = temp;
return in;
}

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;
}
hugeint& hugeint::operator = (hugeint& a)
{
if(size!=a.getsize())return *this;
for(long i=0;i <size;++i)data[i]=a.elem(i);
return *this;
}
hugeint operator +(hugeint& a,hugeint& b)
{
hugeint temp=a;
if(add(temp,b,0))
cerr < <ERRORMSG < <endl;
return temp;
}
hugeint operator -(hugeint& a,hugeint& b)
{
hugeint temp1=a,temp2=b;
temp2.inverse();
add(temp1,temp2,1);
return temp1;
}
hugeint operator *(hugeint& a,hugeint& b)
{
hugeint temp1=a,temp2=temp1;
temp1.clear();
for(long i=0;i <b.size;++i)
{
temp2=a;
mul(temp2,b.data[i]);
add(temp1,temp2,0,i);
}
return temp1;
}
hugeint operator /(hugeint& a,hugeint& b)
{
hugeint stemp=a,rtemp=a;
if(div(a,b,stemp,rtemp))
cerr < <ERRORMSG < <endl;
return stemp;
}
hugeint operator %(hugeint& a,hugeint& b)
{
hugeint stemp=a,rtemp=a;
if(div(a,b,stemp,rtemp))
cerr < <ERRORMSG < <endl;
return rtemp;
}
int add(hugeint& a,hugeint& b,int s,int bitm)
{
long size;
if((size=a.size)!=b.size)return -2;
for(long i=bitm;i <size;++i)
{
int t=a.data[i]+b.data[i-bitm]+s;
a.data[i]=t%10000;
s=t/10000;
}
if(s)return -1;
return 0;
}
int mul(hugeint& a,int n)
{
int s=0;
for(long i=0;i <a.size;++i)
{
long t=a.data[i]*n+s;
a.data[i]=t%10000;
s=t/10000;
}
if(s)return -1;
return 0;
}
int div(hugeint& a,hugeint& b,hugeint& s,hugeint& r)//s=a/b,r=a%b
{
hugeint temp1=a,temp2=b,temp3=a;
s.clear();
while(1)
{
temp2=b;
temp2.inverse();
temp3=temp1;
if(!add(temp1,temp2,1))break;
if(s.inc())return -1;
}
r=temp3;
return 0;
}
//main.cpp文件
//#include "hugeint.h "
#define N 1000
void main()
{

hugeint a(N);

hugeint b=a,c=a;
//a= "300000000 ";
//b= "123432543 ";
cout < < "enter a " < <endl;
cin> > a;
cout < < "enter b " < <endl;
cin> > b;

cout < <a+b < <endl
< <a-b < <endl
< <a*b < <endl
< <a/b < <endl
< <a%b < <endl;
}

热点排行