⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jie.cpp

📁 一个算200阶乘的程序
💻 CPP
字号:
//#include "stdafx.h"

#include "iostream.h"
#include "stdlib.h"


//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(void);

int GetData(void){return data;};
void SetData(int item){data = item;};

//reset
Node* GoBacktoHead();

//go to the rear
Node* GoForwardtoRear();
//clear the whole
void ClearAll(void);

//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;}
};


void Node::DeleteMe(void)
{
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(void)
{
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);

N=200;
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();
cout<<"200的阶乘是 ";
while(p->GetPrevNode()!=NULL){
cout<<p->GetData();
p=p->GetPrevNode();
}

cout<<p->GetData()<<endl;
//clear the memory
p->ClearAll();

return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -