大数相加 用栈
2015-06-01 21:29
375 查看
#include "StdAfx.h" using namespace std; const int Maxn = 1000+10; #define DATA char typedef struct _STACKNODE_ { DATA* Data; _STACKNODE_* Next; void InitMember() { Next = NULL; Data = NULL; } }STACKNODE,*PSTACKNODE,**PPSTACKNODE; typedef struct _STACK_ { PSTACKNODE Head; PSTACKNODE Tail; int iCount; void InitMember() { Head = Tail = NULL; iCount = 0; } }STACK,*PSTACK; bool InStack(PSTACK Stack,DATA Data); bool OutStack(PSTACK Stack,DATA* Data); bool IsEmpty(PSTACK Stack); bool GetTop(PSTACK Stack,DATA* Data); int main() { int i = 0; int n = 0; DATA Data = '0'; STACK Stack1 ; STACK Stack2 ; STACK Stack3; Stack1.InitMember(); Stack2.InitMember(); Stack3.InitMember(); cout << "输入数字的位数" << endl; cin >> n; for (i = 0;i<n;i++) { cin >> Data; InStack(&Stack1,Data-'0'); } cout << "输入数字的位数" << endl; cin >> n; for (i = 0;i<n;i++) { cin >> Data; InStack(&Stack2,Data-'0'); } Data = 0; while (!IsEmpty(&Stack1)||!IsEmpty(&Stack2)) { DATA DataTemp = '0'; DATA DataTemp1 = '0'; DATA DataTemp2 = '0'; GetTop(&Stack1,&DataTemp1); GetTop(&Stack2,&DataTemp2); OutStack(&Stack1,&DataTemp1); OutStack(&Stack2,&DataTemp2); DataTemp = (DataTemp1+DataTemp2+Data)%10; Data = (DataTemp1+DataTemp2+Data)/10; InStack(&Stack3,DataTemp); } if (Data>0) { cout << 1 ; } while (!IsEmpty(&Stack3)) { OutStack(&Stack3,&Data); printf("%d",Data); } cout << endl; return 0; } bool InStack(PSTACK Stack,DATA Data) { PSTACKNODE Node = (PSTACKNODE)malloc(sizeof(PSTACKNODE)); if (Node==NULL) { return false; } else { Node->InitMember(); Node->Data = (DATA*)malloc(sizeof(DATA)); if (Node->Data==NULL) { return false; } memcpy((Node->Data),&Data,sizeof(DATA)); if (Stack->iCount==0) { Stack->Head = Stack->Tail = Node; } else { Stack->Head->Next = Node; Stack->Head = Node; } Stack->iCount++; } return true; } bool IsEmpty(PSTACK Stack) { if (Stack->iCount==0) { return true; } return false; } bool OutStack(PSTACK Stack,DATA* Data) { if (IsEmpty(Stack)) { return false; } memcpy(Data,Stack->Head->Data,sizeof(DATA)); free(Stack->Head->Data); PSTACKNODE PreNode = Stack->Tail; PSTACKNODE Node = Stack->Head; if (Stack->iCount!=1) { while (true) { if (PreNode->Next==Stack->Head) { break; } PreNode = PreNode->Next; } Stack->Head = PreNode; } Stack->iCount--; return true; } bool GetTop(PSTACK Stack,DATA* Data) { if (IsEmpty(Stack)) { return false; } memcpy(Data,Stack->Head->Data,sizeof(DATA)); return true; }
相关文章推荐
- Unity Sprite以及基础博文
- 用Python和Pygame写游戏-从入门到精通(21)
- 用Python和Pygame写游戏-从入门到精通(20)
- IOC与AOP介绍
- 查找(哨兵查找、二分查找、差值查找)
- 一道数学题 hduacm 5144
- 用Python和Pygame写游戏-从入门到精通(22)
- [Java5新特性]Annotation注解
- Android之DDMS无法查看/data/data目录
- Android BroadCast (二)
- [Java5新特性]Annotation注解
- 用Python和Pygame写游戏-从入门到精通(18)
- make: *** No rule to make target解决办法
- 搭建iSCSI共享存储
- 备份与恢复系列 七 续 catalog中的备份脚本
- 用Python和Pygame写游戏-从入门到精通(19)
- 算法学习(java实现之字符串)~~~~字符串查找
- 请根据下面需求,按照数据库设计步骤绘制符合第三范式的E-R图和数据库模型图
- Android 序列化比对
- Android 进程间通信IPC_AIDL