| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
哥哥姐姐们,帮帮忙,又是哪错了!!!??我快疯了,都测了N遍了#include <iostream.h>
class Length
{
private :
long * data;
int length;
int current;
void Enlarge()
{
long *In=new long[2*length];
for(int i=0;i<length;i++)
{
In[i]=data[i];
}
delete data;
data=new long(2*length);
for(int j=0;j<length;j++)
{
data[i]=In[i];
}
length*=2;
delete In;
}
public:
Length(int n)
{
data=new long[50];
for(int x=0;x<50;x++)
{
data[x]=0;
}
length=50;
int sum=0;
int i=0;
do
{
data[i]+=n;
n=data[i]/10000;
data[i]%=10000;
i++;
}while(n!=0);
}
Length(Length & L)
{
this->length=L.length;
data=new long[L.length];
for(int i=0;i<L.length;i++)
{
data[i]=L.data[i];
}
}
Length()
{
data=new long[50];
for(int i=0;i<50;i++)
data[i]=0;
}
~Length()
{
if(length!=0)
{
length=0;
delete data;
}
}
void operator +=(int i)
{
int sum=0;
data[0]+=i;
sum=data[0]/10000;
data[0]%=10000;
int j=0;
for(j=1;j<length&&sum!=0;j++)
{
data[j]+=sum;
sum=data[j]/10000;
data[j]%=10000;
}
if(j==length&&sum!=0)
{
int temp=length;
Enlarge();
for(j=temp;j<length&&sum!=0;j++)
{
data[j]=sum;
sum=data[j]/10000;
data[j]%=10000;
}
}
}
Length & operator +=(const Length &L)
{
int temp=0;
int k=0;
if(this==&L)
{
(*this)*=2;
return * this;
}
for(int i=0;i<L.length;i++)
{
data[i]+=L.data[i];
temp=data[i]/10000;
data[i]%=10000;
for(k=i+1;temp!=0&&k<length;k++)
{
data[k]+=temp;
temp=data[k]/10000;
data[k]%=10000;
}
if(k==length&&temp!=0)
{
int sum=length;
Enlarge();
for(k=sum;k<length&&sum!=0;k++)
{
data[k]+=temp;
temp=data[k]/10000;
data[k]%=10000;
}
}
}
return * this;
}
Length & operator *=(const Length & L)
{
int temp=0;
int i=0;
long * ch=new long[length];
for(int x=0;x<length;x++)
ch[x]=0;
for(int m=0;m<length;m++)
{
temp=0;
for(i=0;i<length-m;i++)
{
ch[i+m]+=temp;
ch[i+m]+=data[i]*L.data[m];
temp=ch[i+m]/10000;
ch[i+m]%=10000;
}
}
for(int a=0;a<length;a++)
{
data[a]=ch[a];
}
delete ch;
return * this;
}
Length & operator *=(int value)
{
int sum=0;
int temp=0;
int i=0;
long * ch=new long[length];
for(int x=0;x<length;x++)
ch[x]=0;
for(int m=0;m<length&&value!=0;m++)
{
temp=0;
sum=value/10000;
value%=10000;
for(i=0;i<length-m;i++)
{
ch[i+m]+=temp;
ch[i+m]+=data[i]*value;
temp=ch[i+m]/10000;
ch[i+m]%=10000;
}
value=sum;
}
for(int a=0;a<length;a++)
{
data[a]=ch[a];
}
delete ch;
return * this;
}
Length & operator -=(int i)
{
int sum=0;
for(int j=0;i!=0&&j<length;j++)
{
sum=i/10000;
i%=10000;
data[j]-=i;
i=sum;
if(data[j]<0)
{
data[j]+=10000;
i+=1;
}
}
return * this;
}
Length & operator -=(Length & L)
{
int sum=0;
int j=0;
for(j=0;j<length;j++)
{
L.data[j]+=sum;
data[j]-=L.data[j];
sum=0;
if(data[j]<0)
{
data[j]+=10000;
sum+=1;
}
}
return * this;
}
Length& operator =(Length &L)
{
if(this==&L)
return *this;
this.~Length();
length=L.length;
data=new long[length];
for(int i=0;i<length;i++)
{
data[i]=L.data[i];
}
return * this;
}
int operator ==(Length & L)
{
if(L.length!=length)
return 0;
int i=0;
for(i=0;i<length;i++)
{
if(data[i]!=L.data[i])
break;
}
if(i==length)
return 1;
else
return 0;
}
int operator >(Length & L)
{
int i=0;
for(i=L.length-1;i>=0;i++)
{
if((data[i]!=0||L.data[i]!=0)&&data[i]!=L.data[i])
break;
}
if(i==-1)
return -1;
if(data[i]>L.data[i])
return 1;
else if(data[i]<=L.data[i])
return 0;
else
return -1;
}
void print()
{
int first=0;
int sum=0;
for(int i=length-1;i>=0;i--)
{
sum=data[i];
if(i==0&&first==0)
{
cout<<sum;
break;
}
if(sum==0&&first==0)
continue;
if(sum!=0&&first==0)
{
cout<<sum;
first=1;
continue;
}
if(sum==0&&first!=0)
{
cout<<"0000";
continue;
}
if(sum!=0&&first!=0)
{
if(sum>=1000)
;
else if(sum>=100)
cout<<"0";
else if(sum>=10)
cout<<"00";
else if(sum>=0)
cout<<"000";
cout<<sum;
continue;
}
}
}
};
class Insect
{
Length *amount;
int M,N;
public:
Insect(int n=0,int m=0)
{
M=m;
N=n;
if(m==1)
amount=new Length(1);
else if(m!=0&&n!=0)
get_Num();
else
amount=new Length(0);
}
~Insect()
{
if(M!=0&&N!=0)
delete amount;
}
friend istream & operator >>(istream & i,Insect &L);
void get_Num()
{
amount=new Length(1);
if(N==1)
return;
int temp=0;
for(int i=0;i<N;i++)
{
(*amount)*=M;
}
if(M%2!=0)
{
(*amount)-=1;
}
else
{
Length L(1);
temp=M/2;
for(int x=0;x<N;x++)
L*=temp;
(*amount)-=L;
}
}
void print()
{
amount->print();
}
};
void main()
{
int i=0,j=0;
cin>>i>>j;
Insect insect(i,j);
insect.print();
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator