长整数加法运算
Posted lancelee98
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了长整数加法运算相关的知识,希望对你有一定的参考价值。
问题描述 :
假设2个任意长度的整数x、y分别由双向链表A和B存储,现要求设计一个算法,实现x+y。计算结果存储在链表C中。
说明:
由于A和B输出时需要从头至尾遍历,而做加法时需要从尾至头遍历,因此使用双向链表存储。
可以从长整数的低位开始拆分(4位为一组,即不超过9999的非负整数),依次存放在链表的每个结点的数据域中;头结点的数据域存放正负数标志(正数或0:1,负数:-1)。
输入说明 :
第一行:长整数x
第二行:长整数y
输出说明 :
第一行:格式化后的长整数x(从低位到高位每4位用","分开)
第二行:格式化后的长整数y(从低位到高位每4位用","分开)
第三行:空行
第四行:单链表C的遍历结果
第五行:格式化后的计算结果(从低位到高位每4位用","分开)
输入范例 :
-53456467576846547658679870988098
435643754856985679
输出范例 :
-5345,6467,5768,4654,7658,6798,7098,8098
43,5643,7548,5698,5679
5345->6467->5768->4611->2014->9250->1400->2419
-5345,6467,5768,4611,2014,9250,1400,2419
1 #define _CRT_SECURE_NO_WARNINGS 2 #include <stdio.h> 3 #include <stdlib.h> 4 #include <string.h> 5 #include <iostream> 6 #include <algorithm> 7 #include<iomanip> 8 #include <vector> 9 #define MY_MAX_LEN 100000 10 using namespace std; 11 typedef struct node 12 { 13 int val;//做头结点时 -1为负数 0为正数 14 struct node* next; 15 struct node* pre; 16 node() {} 17 node(int v) :val(v), next(0), pre(0) {} 18 }Node; 19 void display(Node* head) 20 { 21 Node* p = head->next; 22 while (p && p->val == 0)p = p->next; 23 if (!p) { cout << 0 << endl; return; } 24 if (p) 25 { 26 cout << p->val; 27 p = p->next; 28 } 29 while (p) 30 { 31 cout << "->"; 32 cout << setw(4) << setfill(‘0‘) << p->val; 33 p = p->next; 34 } 35 cout << endl; 36 } 37 void my_print(Node* head) 38 { 39 Node* p = head->next; 40 while (p && p->val == 0)p = p->next; 41 if (!p) { cout << 0 << endl; return; } 42 if (head->val == -1)cout << "-"; 43 if (p) 44 { 45 cout << p->val; 46 p = p->next; 47 } 48 while (p) 49 { 50 cout << ","; 51 cout << setw(4) << setfill(‘0‘) << p->val; 52 p = p->next; 53 } 54 cout << endl; 55 } 56 Node* creatByVector(vector<Node*>& node_vec) 57 { 58 int i; 59 if (node_vec.size() >= 2) 60 { 61 node_vec[0]->next = node_vec[1]; 62 node_vec[node_vec.size() - 1]->pre = node_vec[node_vec.size() - 2]; 63 node_vec[node_vec.size() - 1]->next = NULL; 64 } 65 for (i = 1; i < node_vec.size() - 1; i++) 66 { 67 node_vec[i]->next = node_vec[i + 1]; 68 node_vec[i]->pre = node_vec[i - 1]; 69 } 70 return node_vec[0]; 71 } 72 //使用atoi时一定要记得将字符串末尾设为 73 Node* creatByStr(char* str) 74 { 75 Node* head = new Node(); 76 if (str[0] == ‘-‘) 77 { 78 head->val = -1; 79 strcpy(str, &str[1]); 80 } 81 else 82 head->val = 0; 83 vector<Node*> node_vec; 84 node_vec.push_back(head); 85 char temp[5]; 86 int len = strlen(str); 87 int x = len % 4; 88 if (x) 89 { 90 strncpy(temp, str, x); 91 temp[x] = ‘