| ||||||||||
| 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 | |||||||||
大家看看咋是presentation Error呢?#include <iostream.h>
#include <stdio.h>
const int N=4000;
class HugeInt
{
public:
friend ostream& operator <<(ostream& ,HugeInt);
HugeInt(long);
HugeInt();
HugeInt operator+(HugeInt&);
HugeInt operator+(int);
HugeInt operator*(HugeInt&);
private:
__int64 integer[N];
int size;
};
ostream &operator<<(ostream & output,HugeInt n)
{
int i,j;
for(i =0 ; i<N; i++)
{
if(n.integer[i]!=0)
break;
}
if(i==N)
output<<0;
else
{
printf("%I64d",n.integer[i]);
for(j=i+1 ; j<N ;j++)
{
for(int a=100000000;a>=1; a/=10)
{
if(n.integer[j]/a!=0)
break;
else
printf("%d",0);
}
printf("%I64d",n.integer[j]);
}
}
return output;
}
HugeInt::HugeInt()
{
for(int i=0 ; i< N ; i++)
{
integer[i]=0;
}
size=0 ;
}
HugeInt::HugeInt(long val)
{
for(int i=0 ; i<N ;i++)
{
integer[i]=0;
}
integer[N-1]=val;
if(integer[N-1]==0)
size=0;
else
size=1;
}
HugeInt HugeInt::operator +(int op2)
{
HugeInt temp(op2);
return temp+(*this);
}
HugeInt HugeInt::operator +(HugeInt& op2)
{
HugeInt temp;
int carry=0;
for(int i = N-1 ; i>=0 ; i--)
{
temp.integer[i]=integer[i]+op2.integer[i]+carry;
if(temp.integer[i]>=1000000000)
{
temp.integer[i]%=1000000000;
carry=1;
}
else
carry=0;
}
for(i=0 ;i<N ; i++)
{
if(temp.integer[i]!=0)
{
temp.size=N-i;
break;
}
}
return temp;
}
HugeInt HugeInt:: operator *(HugeInt& op2)
{
int j,k;
HugeInt temp2;
__int64 carry=0;
int position=0;//record the position of digit in op2
for(j=N-1 ; j >= N-op2.size ; j --)
{
HugeInt temp1;
for(k=N-1 ;; k--)
{
temp1.integer[k-position]=integer[k]*op2.integer[j]+carry;
carry=temp1.integer[k-position]/1000000000;
temp1.integer[k-position]=temp1.integer[k-position]%1000000000;
if(carry==0 && k<=N-size)
break;
}
temp2=temp2+temp1;
position++;
}
for(j=0 ;j<N; j++)
{
if(temp2.integer[j]!=0)
{
temp2.size=N-j;
break;
}
}
return temp2;
}
int main(int argc, char* argv[])
{
int num=0,i=0;
cin>>num;
HugeInt *out=new HugeInt[num];
out[0]=1;
for(i=1 ; i<num ; i++)
{
out[i]=out[i-1]*(out[i-1]+1);
}
for(i=0 ; i<num ; i++)
{
cout<<out[i]+1<<endl;
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator