Revision: 55828
                            
                                                            
                                    
                                        
Updated Code
                                    
                                    
                                                    
                        at February 23, 2012 16:43 by Veeggon
                            
                            Updated Code
//
//
// Nnn.cpp : Defines the entry point for the console application.
// author  : Hai Yi
// review : V. Cortes / Feb,23,2012
// date    : Sept,11,2000
//
//
#include <iostream>
#include <stdlib.h>
using namespace std;
//here is a dual link list
class Node{
private:
 int data;
 Node *next;
 Node *prev;
 Node *head;
 Node *rear;
public:
 Node(const int& item)
     :data(item),prev(NULL),next(NULL),head(NULL),rear(NULL){}
 //get next node
 Node* GetNextNode(){return next;}
 Node* GetPrevNode(){return prev;}
 //insert after
 void InsertAfterMe(Node* p);
 //Delete the appointed
 void DeleteMe();
 int GetData(){return data;}
 void SetData(int item){data = item;}
 //reset
 Node* GoBacktoHead();
 //go to the rear
 Node* GoForwardtoRear();
 //clear the whole
 void ClearAll();
 //get the counts of the link
 int GetElementNum();
};
int Node::GetElementNum()
{
 int count = 0;
 Node* p =GoBacktoHead();
 while(p->GetNextNode()!=NULL){
  count++;
  p = p->GetNextNode();
 }
 count++;
 return count;
}
void Node::InsertAfterMe(Node* p)
{
 //	Node* p;
 if(prev == NULL) { head = this;}
 p->next = next;
 p->prev = this;
 next = p;
 if(p->next == NULL) rear = p;
 else p->next->prev = p;
}
void Node::DeleteMe()
{
 if(prev == NULL) { // if this node is the first one
  next->prev = NULL;
  head = next;  // then the next one becomes the first one
  delete this;  //delete this node
  return;
 }
 if(next == NULL){  //if this node is the last one
  prev->next = NULL;
  rear = prev; // then the previous one becomes the last one
  delete this;
  return;
 }
 prev->next = next;
 next->prev = prev;
 delete this;
}
Node* Node::GoBacktoHead()
{
 if(head == this){ //this is the first node
  return this;
 }
 Node *p = this;
 while(p->prev != NULL){
  p = p->prev;
 }
 return p;
}
Node* Node::GoForwardtoRear()
{
 if(rear == this){
  return this;
 }
 Node *p = this;
 while(p->next != NULL){
  p = p->next;
 }
 return p;
}
void Node::ClearAll()
{
 Node* p = GoBacktoHead();
 Node* p2;
 while(p->GetNextNode() != NULL){
  p2 = p;
  p = p->GetNextNode();
  delete p2;
 }
 delete p;
}
int main(int argc, char* argv[])
{
 int remain;
 int carry;
 int result;
 int N;
 Node* p = new Node(1);
 std::cout<<"Input the number: ";
 std::cin>>N;
 for(int n=1;n<=N;n++)
 {
  remain = carry = 0;
  p = p->GoBacktoHead();
  //while not the end of the list,process the element one by one
  while(p->GetNextNode() != NULL){
   result = p->GetData()*n+carry;
   if(result>=10){
    remain = result%10;
    carry = result/10;
    p->SetData(remain);
   }
   else{
       p->SetData(result);
       carry = result/10;
   }
  p = p->GetNextNode();
  }
  result = p->GetData()*n+carry;
  //if carry occurs,process the carry and
  //**store into the newly allocated space.**
  while(result >= 10){
   p->SetData(result%10);//remainder
   Node * newNode = new Node(0); //create new node with data 0
   result = result/10; //cut last digit
   p->InsertAfterMe(newNode); //put new node in the rear
   p = p->GetNextNode(); //advance to this new node
  }
  p->SetData(result); //when result < 10, put result in this new node
 }//end of for
 p = p->GoForwardtoRear();
 while(p->GetPrevNode()!=NULL){
  std::cout<<p->GetData();
  p=p->GetPrevNode();
 }
 std::cout<<p->GetData()<<std::endl;
 int num = p->GetElementNum();
 if(num >=5){
  p = p->GoForwardtoRear();
  std::cout<<std::endl<<"Or"<<std::endl<<std::endl;
  std::cout<<p->GetData()<<".";
  p = p->GetPrevNode();
  for(int i=1;i<10;i++){
   std::cout<<p->GetData();
   p = p->GetPrevNode();
  }
  std::cout<<"e"<<num-1<<std::endl;
 }
 //clear the memory
 p->ClearAll();
 return 0;
}
                                
                            Revision: 55827
                            
                                                            
                                    
                                        
Updated Code
                                    
                                    
                                                    
                        at February 23, 2012 14:18 by Veeggon
                            
                            Updated Code
//
//
// Nnn.cpp : Defines the entry point for the console application.
// author  : Hai Yi
// review : V. Côrtes / Feb,23,2012
// date    : Sept,11,2000
//
#include <iostream>
#include <stdlib.h>
using namespace std;
//here is a dual link list
class Node{
private:
 int data;
 Node *next;
 Node *prev;
 Node *head;
 Node *rear;
public:
 Node(const int& item)
 :data(item),prev(NULL),next(NULL),head(NULL),rear(NULL){};
 //get next node
 Node* GetNextNode(){return next;};
 Node* GetPrevNode(){return prev;};
 //insert after
 void InsertAfterMe(Node* p);
 //Delete the appointed
 void DeleteMe();
 int GetData(){return data;};
 void SetData(int item){data = item;};
 //reset
 Node* GoBacktoHead();
 //go to the rear
 Node* GoForwardtoRear();
 //clear the whole
 void ClearAll();
 //get the counts of the link
 int GetElementNum();
};
int Node::GetElementNum()
{
 int count = 0;
 Node* p =GoBacktoHead();
 while(p->GetNextNode()!=NULL){
  count++;
  p = p->GetNextNode();
 }
 count++;
 return count;
}
void Node::InsertAfterMe(Node* p)
{
 //	Node* p;
 if(prev == NULL) { head = this;}
 p->next = next;
 p->prev = this;
 next = p;
 if(p->next == NULL)rear = p;
 else p->next->prev = p;
}
void Node::DeleteMe()
{
 if(prev == NULL) { // if this node is the first one
  next->prev = NULL;
  head = next;  // then the next one becomes the first one
  delete this;  //delete this node
  return;
 }
 if(next == NULL){  //if this node is the last one
  prev->next = NULL;
  rear = prev; // then the previous one becomes the last one
  return;
 }
 prev->next = next;
 delete this;
};
Node* Node::GoBacktoHead()
{
 if(head == this){ //this is the first node
  return this;
 }
 Node *p = this;
 while(p->prev != NULL){
  p = p->prev;
 }
 return p;
}
Node* Node::GoForwardtoRear()
{
 if(rear == this){
  return this;
 }
 Node *p = this;
 while(p->next != NULL){
  p = p->next;
 }
 return p;
}
void Node::ClearAll()
{
 Node* p = GoBacktoHead();
 Node* p2;
 while(p->GetNextNode() != NULL){
  p2 = p;
  p = p->GetNextNode();
  delete p2;
 }
 delete p;
};
int main(int argc, char* argv[])
{
 int remain;
 int carry;
 int result;
 int N;
 Node* p = new Node(1);
 std::cout<<"Pls input the number:";
 std::cin>>N;
 for(int n=1;n<=N;n++)
 {
  remain = carry = 0;
  p = p->GoBacktoHead();
  //while not the end of the list,process the element one by one
  while(p->GetNextNode() != NULL){
   result = p->GetData()*n+carry;
   if(result>=10){
    remain = result%10;
    carry = result/10;
    p->SetData(remain);
   }
   else{p->SetData(result);}
  p = p->GetNextNode();
  carry = result/10;
  }
  result = p->GetData()*n+carry;
  //if carry occurs,process the carry and
  //store into the newly allocated space.
  while(result >= 10){
   Node * newNode = new Node(0);
   p->SetData(result%10);//remainder
   result = result/10;
   p->InsertAfterMe(newNode);
   p = p->GetNextNode();
  }
  p->SetData(result);
 }//end of if
 p = p->GoForwardtoRear();
 while(p->GetPrevNode()!=NULL){
  std::cout<<p->GetData();
  p=p->GetPrevNode();
 }
 std::cout<<p->GetData()<<std::endl;
 int num = p->GetElementNum();
 if(num >=5){
  p = p->GoForwardtoRear();
  std::cout<<std::endl<<"Or"<<std::endl<<std::endl;
  std::cout<<p->GetData()<<".";
  p = p->GetPrevNode();
  for(int i=1;i<5;i++){
   std::cout<<p->GetData();
   p = p->GetPrevNode();
  }
  std::cout<<"E"<<num-1<<std::endl;
 }
 //clear the memory
 p->ClearAll();
 return 0;
}
                                
                            Revision: 55826
                            
                                                            
                                    
                                        
Initial Code
                                    
                                    
                                                            
                                    
                                        
Initial URL
                                    
                                    
                                
                                                            
                                    
                                        
Initial Description
                                    
                                    
                                                            
                                    
                                        
Initial Title
                                    
                                    
                                                            
                                    
                                        
Initial Tags
                                    
                                    
                                
                                                            
                                    
                                        
Initial Language
                                    
                                    
                                                    
                        at February 23, 2012 14:13 by Veeggon
                            
                            Initial Code
//
//
// Nnn.cpp : Defines the entry point for the console application.
// author  : Hai Yi
// date    : Sept,11,2000
//
//
#include <iostream>
#include <stdlib.h>
using namespace std;
//here is a dual link list
class Node{
private:
 int data;
 Node *next;
 Node *prev;
 Node *head;
 Node *rear;
public:
 Node(const int& item)
 :data(item),prev(NULL),next(NULL),head(NULL),rear(NULL){};
 //get next node
 Node* GetNextNode(){return next;};
 Node* GetPrevNode(){return prev;};
 //insert after
 void InsertAfterMe(Node* p);
 //Delete the appointed
 void DeleteMe();
 int GetData(){return data;};
 void SetData(int item){data = item;};
 //reset
 Node* GoBacktoHead();
 //go to the rear
 Node* GoForwardtoRear();
 //clear the whole
 void ClearAll();
 //get the counts of the link
 int GetElementNum();
};
int Node::GetElementNum()
{
 int count = 0;
 Node* p =GoBacktoHead();
 while(p->GetNextNode()!=NULL){
  count++;
  p = p->GetNextNode();
 }
 count++;
 return count;
}
void Node::InsertAfterMe(Node* p)
{
 //	Node* p;
 if(prev == NULL) { head = this;}
 p->next = next;
 p->prev = this;
 next = p;
 if(p->next == NULL)rear = p;
 else p->next->prev = p;
}
void Node::DeleteMe()
{
 if(prev == NULL) { // if this node is the first one
  next->prev = NULL;
  head = next;  // then the next one becomes the first one
  delete this;  //delete this node
  return;
 }
 if(next == NULL){  //if this node is the last one
  prev->next = NULL;
  rear = prev; // then the previous one becomes the last one
  return;
 }
 prev->next = next;
 delete this;
};
Node* Node::GoBacktoHead()
{
 if(head == this){ //this is the first node
  return this;
 }
 Node *p = this;
 while(p->prev != NULL){
  p = p->prev;
 }
 return p;
}
Node* Node::GoForwardtoRear()
{
 if(rear == this){
  return this;
 }
 Node *p = this;
 while(p->next != NULL){
  p = p->next;
 }
 return p;
}
void Node::ClearAll()
{
 Node* p = GoBacktoHead();
 Node* p2;
 while(p->GetNextNode() != NULL){
  p2 = p;
  p = p->GetNextNode();
  delete p2;
 }
 delete p;
};
int main(int argc, char* argv[])
{
 int remain;
 int carry;
 int result;
 int N;
 Node* p = new Node(1);
 std::cout<<"Pls input the number:";
 std::cin>>N;
 for(int n=1;n<=N;n++)
 {
  remain = carry = 0;
  p = p->GoBacktoHead();
  //while not the end of the list,process the element one by one
  while(p->GetNextNode() != NULL){
   result = p->GetData()*n+carry;
   if(result>=10){
    remain = result%10;
    carry = result/10;
    p->SetData(remain);
   }
   else{p->SetData(result);}
  p = p->GetNextNode();
  carry = result/10;
  }
  result = p->GetData()*n+carry;
  //if carry occurs,process the carry and
  //store into the newly allocated space.
  while(result >= 10){
   Node * newNode = new Node(0);
   p->SetData(result%10);//remainder
   result = result/10;
   p->InsertAfterMe(newNode);
   p = p->GetNextNode();
  }
  p->SetData(result);
 }//end of if
 p = p->GoForwardtoRear();
 while(p->GetPrevNode()!=NULL){
  std::cout<<p->GetData();
  p=p->GetPrevNode();
 }
 std::cout<<p->GetData()<<std::endl;
 int num = p->GetElementNum();
 if(num >=5){
  p = p->GoForwardtoRear();
  std::cout<<std::endl<<"Or"<<std::endl<<std::endl;
  std::cout<<p->GetData()<<".";
  p = p->GetPrevNode();
  for(int i=1;i<5;i++){
   std::cout<<p->GetData();
   p = p->GetPrevNode();
  }
  std::cout<<"E"<<num-1<<std::endl;
 }
 //clear the memory
 p->ClearAll();
 return 0;
}
                                Initial URL
Initial Description
Limited by memory.
Initial Title
Factorials of (Almost) Any Size
Initial Tags
Initial Language
C++