1 #include<iostream> 2 #include<cstring> 3 #include<string> 4 #include <vector> 5 #include <algorithm> 6 7 using namespace std; 8 9 int compare(string a, string b) 10 { 11 if (a.size() > b.size()) 12 { 13 return 1; 14 } 15 if (a.size() < b.size()) 16 { 17 return -1; 18 } 19 for (int i = 0; i < a.size(); i++) 20 { 21 if (a[i]>b[i]) 22 { 23 return 1; 24 } 25 if (a[i]<b[i]) 26 { 27 return -1; 28 } 29 } 30 return 0; 31 } 32 33 string add(string a, string b) 34 { 35 string res = ""; 36 int flag = 0; 37 int i, j; 38 for (i = a.size() - 1, j = b.size() - 1; i >= 0 && j >= 0; i--, j--) 39 { 40 int tmp = a[i] + b[j] - 2 * '0' + flag; 41 if (tmp >= 10) 42 { 43 tmp -= 10; 44 flag = 1; 45 } 46 else 47 { 48 flag = 0; 49 } 50 res.insert(res.begin(), tmp + '0'); 51 } 52 i++; j++; 53 54 if (i == 0 && j == 0) 55 { 56 if (flag == 1) 57 { 58 res.insert(0, "1"); 59 } 60 } 61 else 62 { 63 string lastStr; 64 if (i != 0) 65 { 66 lastStr = a.substr(0, i); 67 } 68 if (j != 0) 69 { 70 lastStr = b.substr(0, j); 71 } 72 if (flag == 0) 73 { 74 res.insert(0, lastStr); 75 } 76 else 77 { 78 for (int k = lastStr.size() - 1; k >= 0; k--) 79 { 80 int tmp = lastStr[k] - '0' + flag; 81 if (tmp >= 10) 82 { 83 tmp -= 10; 84 flag = 1; 85 } 86 else 87 { 88 flag = 0; 89 } 90 res.insert(res.begin(), tmp + '0'); 91 } 92 if (flag == 1) 93 { 94 res.insert(0, "1"); 95 } 96 } 97 } 98 return res; 99 } 100 //保证大-小 101 string minus1(string a, string b) 102 { 103 string res; 104 int flag = 0; 105 106 int i, j; 107 for (i = a.size() - 1, j = b.size() - 1; i >= 0 && j >= 0; i--, j--) 108 { 109 int tmp = a[i] - b[j] - flag; 110 if (tmp < 0) 111 { 112 tmp += 10; 113 flag = 1; 114 } 115 else 116 { 117 flag = 0; 118 } 119 res.insert(res.begin(), tmp + '0'); 120 } 121 122 123 for (int k = i; k >= 0; k--) 124 { 125 int tmp = a[k] - flag - '0'; 126 if (tmp < 0) 127 { 128 tmp += 10; 129 flag = 1; 130 } 131 else 132 { 133 flag = 0; 134 } 135 if (k == 0) 136 { 137 if (tmp != 0) 138 { 139 res.insert(res.begin(), tmp + '0'); 140 } 141 } 142 else 143 { 144 res.insert(res.begin(), tmp + '0'); 145 } 146 } 147 return res; 148 } 149 150 string fun(string a) 151 { 152 int n = 0; 153 for (int i = 0; i < a.size(); i++) 154 { 155 if (a[i] != '0') 156 { 157 break; 158 } 159 else 160 { 161 n++; 162 } 163 } 164 if (n == a.size()) 165 { 166 return "0"; 167 } 168 a = a.substr(n, a.size() - n); 169 return a; 170 } 171 172 int main() 173 { 174 string str1, str2; 175 while (cin >> str1>>str2) 176 { 177 bool sy1 = true, sy2 = true; 178 if (str1[0] == '-') 179 { 180 sy1 = false; 181 str1 = str1.substr(1, str1.size() - 1); 182 } 183 if (str2[0] == '-') 184 { 185 sy2 = false; 186 str2 = str2.substr(1, str2.size() - 1); 187 } 188 189 if ((sy1 == true && sy2 == true) || (sy1 == false && sy2 == false)) 190 { 191 string tmp = fun(add(str1, str2)); 192 if (sy1) 193 { 194 cout << tmp << endl; 195 } 196 else 197 { 198 if (tmp == "0") 199 { 200 cout << tmp << endl; 201 } 202 else 203 { 204 cout << "-" << tmp << endl; 205 } 206 } 207 } 208 else 209 { 210 string tmp; 211 if (compare(str1, str2) == 1) 212 { 213 tmp = fun(minus1(str1, str2)); 214 if (sy1) 215 { 216 cout << tmp << endl; 217 } 218 else 219 { 220 if (tmp == "0") 221 { 222 cout << tmp << endl; 223 } 224 else 225 { 226 cout << "-" << tmp << endl; 227 } 228 } 229 } 230 else 231 { 232 tmp = fun(minus1(str2, str1)); 233 if (sy1) 234 { 235 if (tmp == "0") 236 { 237 cout << tmp << endl; 238 } 239 else 240 { 241 cout << "-" << tmp << endl; 242 } 243 } 244 else 245 { 246 cout << tmp << endl; 247 } 248 } 249 } 250 251 252 } 253 254 255 return 0; 256 }
相关文章: