两个最大数相加C语言程序_附完整源码

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
两个最大数相加 C 语言程序
// HelloWorld.cpp : Defines the entry point for the console application. // //#include "stdafx.h" #include <string.h> #include <stdio.h> #include <stdlib.h> struct Node // 定义一个双向链表用来存贮结果 { int sign; // 0 -> 正数, 1->负数 int data; // 数据,表示绝对值。 Node *next; // 尾指针 Node *ahead; // 首指针 }; int GetNodeLen(Node* pHead) { int len = 0; Node* pCurrent = pHead; if (pHead->ahead == pHead && pHead->next == pHead) return 1; else { len = 0; while (pCurrent->next != pHead) { len++; pCurrent = pCurrent->next; } len++; } return len; } // Return 1 if Node1 ABS value > Node2 ABS value, return 0 if they are equal, otherwise, return -1. int CompareNodeAbsValue(Node* pHead1, Node* pHead2) {
Node* p1 = pHead1; Node* p2 = pHead2; int node1_len = GetNodeLen(pHead1); int node2_len = GetNodeLen(pHead2); if (node1_len > node2_len) { return 1; } else if(node1_len == node2_len) { if (node1_len == 1) { if (pHead1->data > pHead2->data) return 1; else if (pHead1->data == pHead2->data) return 0; } else { while (p1->next != pHead1) { if (p1->data > p2->data) return 1; else if (p1->data < p2->data) return -1; p1 = p1->next; p2 = p2->next; } if (p1->data > p2->data) return 1; else if (p1->data == p2->data) return 0; else return -1; } } else return -1; } Node* CreateNode(char *str) { char *pStr; pStr = str;
ຫໍສະໝຸດ Baidu
if (pCurrent == 0) { sscanf(buff, "%d", &temp_data); pHead->data = temp_data; pCurrent = new Node; pCurrent->ahead = pHead; pHead->next = pCurrent; } else { sscanf(buff, "%d", &temp_data); pCurrent->data = temp_data; pTemp = new Node; pCurrent->next = pTemp; pTemp->ahead = pCurrent; pCurrent = pTemp; } if (*pStr == ',') pStr++; else break; } // 最后将链表连接起来! pHead->ahead = pCurrent->ahead; pHead->ahead->next = pHead; return pHead; } Node* AddWithOutSign(Node* pNum1, Node* pNum2) { Node* p1 = pNum1->ahead; Node* p2 = pNum2->ahead; Node* pTail = 0; Node* pHead = 0; Node* pCurrent = 0; Node* pTemp; int temp_data; //两个都为正数,相加,并且进位。 int jw = 0; while (p1 != pNum1 && p2 != pNum2) { if (pTail == 0)
Node* pHead = new Node; pHead->sign = 0; pHead->data = 0; Node *pCurrent = 0; Node* pTemp = 0; char buff[5]; bool bFirst = true; int temp_data; while (*pStr != '\0') { if (bFirst) { if (*pStr != '-') { pHead->sign = 0; bFirst = false; } else { pHead->sign = 1; pStr++; bFirst = false; continue; } } // Loop until we find a "," or '\0'; int cnt = -1; while (cnt++ < 5) { if ((*pStr != ',') && (*pStr != '\0')) { buff[cnt] = *pStr; pStr++; } else { buff[cnt] = '\0'; break; } }
{ pTail = new Node; temp_data = p1->data + p2->data; if (temp_data > 9999) { jw = 1; temp_data = temp_data - 10000; } pTail->data = temp_data; pCurrent = new Node; pTail->ahead = pCurrent; pCurrent->next = pTail; } else { temp_data = p1->data + p2->data + jw; if (temp_data > 9999) { jw = 1; temp_data = temp_data - 10000; } else { jw = 0; } pCurrent->data = temp_data; pTemp = new Node; pCurrent->ahead = pTemp; pTemp->next = pCurrent; pCurrent = pTemp; } p1 = p1->ahead; p2 = p2->ahead; } // p1 现在指向最后一个元素 if (p1 == pNum1) { // 如果 p2 也指向最后一个元素 if (p2 == pNum2) { // 两个链表均长度为 1 if (pTail == 0) { pTail = new Node;
相关文档
最新文档