Single chain achieved by adding large numbers

Byte beating face questions:

Number two is a positive number.

By summing list:

Live out the time to write a few bug really embarrassing. . .

A sample

2 3 4 5
4 5 6
2 8 0 1

Sample two

9 9 9
9 9 9
1 9 9 9

 

 

  1 #include <iostream>
  2 using namespace std;
  3 
  4 struct List{
  5     int val;
  6     List * next;
  7 };
  8 
  9 List* insert(List *node, int val){
 10     List *root = node;
 11     if(node == NULL){
 12         // cout << "!!" << endl;
 13         node = new List();
 14         root = node;
 15         node->val = val;
 16         node->next = NULL;
 17     }else{
 18         while(node->next != NULL){
 19             node = node->next;
 20         }
 21         List * an = new List();
 22         an->val = val;
 23         an->next = node->next;
 24         node->next = an;
 25     }
 26     return root;
 27 }
 28 
 29 void print(List *an){
 30     while(an != NULL){
 31         cout << an->val<<" ";
 32         an = an->next;
 33     }
 34     cout << endl;
 35 }
 36 
 37 
 38 List * become(List *node){
 39     if(node == NULL) return NULL;
 40     List *pnext = NULL;
 41     List *parent = NULL;
 42     while(node != NULL){
 43         pnext = node->next;
 44         node->next = parent;
 45         parent = node;
 46         node = pnext;
 47     }
 48     return parent;
 49 }
 50 
 51 List * getsum(List *a, List *b){
 52     List *an = become(a);
 53     List *bn = become(b);
 54     List *cn = new List();
 55     int flag = 0;
 56     while(an != NULL && bn!=NULL){
 57         List *cnt = new List();
 58         cnt->val= (an->val + bn->val + flag)%10;
 59         if((an->val + bn->val + flag)>=10)
 60             flag = 1;
 61         else
 62             flag = 0;
 63         cnt->next = cn->next;
 64         cn->next = cnt;
 65         an = an->next;
 66         bn = bn->next;
 67     }
 68     while(an != NULL){
 69         List *cnt = new List();
 70         if((an->val + flag)>=10)
 71             flag = 1;
 72         else
 73             flag = 0;
 74         cnt->val= (an->val + flag)%10;
 75         cnt->next = cn->next;
 76         cn->next = cnt;
 77         an = an->next;
 78     }
 79     while(bn != NULL){
 80         List *cnt = new List();
 81         if((bn->val + flag)>=10)
 82             flag = 1;
 83         else
 84             flag = 0;
 85         cnt->val= (bn->val + flag)%10;
 86         cnt->next = cn->next;
 87         cn->next = cnt;
 88         bn = bn->next;
 89     }
 90     if(flag == 1){
 91         List *cnt = new List();
 92         cnt->val= 1;
 93         cnt->next = cn->next;
 94         cn->next = cnt;
 95     }
 96     return cn->next;
 97 }
 98 
 99 
100 int main() {
101     string s;
102     getline(cin, s);
103     List *a = NULL, *b = NULL;
104     int cnt = 0;
105     s += ' ';
106     for(int i = 0; i < s.length(); i++){
107         if(isdigit(s[i])){
108             cnt = cnt*10 + s[i]-'0';
109         }else{
110             a = insert(a, cnt);
111             cnt = 0;
112         }
113     }
114     getline(cin, s);
115     cnt = 0;
116     s += ' ';
117     for(int i = 0; i < s.length(); i++){
118         if(isdigit(s[i])){
119             cnt = cnt*10 + s[i]-'0';
120         }else{
121             b= insert(b, cnt);
122             cnt = 0;
123         }
124     }
125     List * node = getsum(a,b);
126     print(node);
127     return 0;
128 }

 

Guess you like

Origin www.cnblogs.com/zllwxm123/p/11488429.html
Recommended