I got the solution for any Big number!!! This code is very efficient and optimized implemented by limked list..
Code:
class Link
{
//Data Member Parts
private:
 int dta;
 Link *nxt;
 Link *prv;
 Link *hd;
 Link *rear;

// Function Member Parts

public:
 Link(const int& tmp)  :dta(tmp),hd(NULL),rear(NULL),prv(NULL),nxt(NULL)
{
          ;
}
 Link* NxtLnk()   //getting next node
{
    return nxt;
}

 Link* PrvLnk()  //getting previous node
{
  return prv;
}
 void ExtraInsert(Link* p);          // After Inserting
 int getDta(void)
{
   return dta;
}
 void SetDta(int temp)
{
   dta = temp;
}
 int GetNoOfElem();
 Link* ToHead();
 Link* ToRear();
 void DeleteMe(void);
 void ClearAll(void);
};


int Link::GetNoOfElem()
{
 int count = 0;
 Link* p =ToHead();

 while(p->NxtLnk()!=NULL){
  count++;
  p = p->NxtLnk();
 }

 count++;
 return count;
}

void Link::ExtraInsert(Link* p)
{
 //    Link* p;
 if(prv == NULL) { hd = this;}
 p->nxt = nxt;
 p->prv = this;
 nxt = p;
 if(p->nxt == NULL){rear = p;}
};



Link* Link::ToHead()
{
 if(hd == this){ //this is the first node
  return this;
 }

 Link *p = this;
 while(p->prv != NULL){
  p = p->prv;
 }

 return p;
}

Link* Link::ToRear()
{
 if(rear == this){
  return this;
 }

 Link *p = this;
 while(p->nxt != NULL){
  p = p->nxt;
 }

 return p;
}



//***** Start ************//
void Link::DeleteMe(void)
{
 if(prv == NULL) // First Element
{
  nxt->prv = NULL;
  hd = nxt;  // Next will be first one
  delete this;
  return;
 }
 if(nxt == NULL)
{
  prv->nxt = NULL; // last node
  rear = prv; //Previous node will be first
  return;
 }
 prv->nxt = nxt;
 delete this;
}
//****  End Of Function*******//

void Link::ClearAll(void)
{
 Link* p1 = ToHead();
 Link* p2;
 while(p1->NxtLnk() != NULL){
  p2 = p1;
  p1 = p1->NxtLnk();
  delete p2;
 }
 delete p1;
};


int main()
{
 int n;// remainder
 int cy  // Carried over
 int rst;
 int N;
 Link* p = new Link(1);

 cout<<"Plz input the number:";
 cin>>N;
 for(int n=1;n<=N;n++)
 {
  rn = carry = 0;
  p = p->ToHead();

  while(p->NxtLnk() != NULL)
{
   rst = p->getDta()*n+cy
   if(rst>=10){
    rn = rst%10;
    carry = rst/10;
    p->SetDta(rn);
   }
   else
  {
      p->SetDta(rst);
  }
  p = p->NxtLnk();
  carry = rst/10;
  }
  rst = p->getDta()*n+cy


//Other allocated memory for carried over
  while(rst >= 10){
   Link * newLink = new Link(0);
   p->SetDta(rst%10);//rnder
   rst = rst/10;
   p->ExtraInsert(newLink);
   p = p->NxtLnk();
  }
  p->SetDta(rst);
 }

 p = p->ToRear();
 while(p->PrvLnk()!=NULL)
{
  cout<<p->GetDta();
  p=p->PrvLnk();
 }
 cout<<p->GetDta()<<endl;
 int num = p->GetNoOfElem();
 if(num >=5)
{
  p = p->ToRear();
  cout<<endl<<"Or"<<endl<<endl;

  cout<<p->GetDta()<<".";
  p = p->PrvLnk();

 for(int i=1;i<5;i++)
{
   cout<<p->GetDta();
   p = p->PrvLnk();
  }
  cout<<"E"<num-1<endl;
 }
 p->ClearAll();
 return 0;
}

Last edited by shabbir; 15Jan2008 at 17:12.. Reason: Code block