题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1005
要处理符号,还要特别注意0和连续进位等情况。偷懒使用strcmp,但是前提必须是长度相等,否则是字典序。
1 #include <algorithm> 2 #include <iostream> 3 #include <iomanip> 4 #include <cstring> 5 #include <climits> 6 #include <complex> 7 #include <fstream> 8 #include <cassert> 9 #include <cstdio> 10 #include <bitset> 11 #include <vector> 12 #include <deque> 13 #include <queue> 14 #include <stack> 15 #include <ctime> 16 #include <set> 17 #include <map> 18 #include <cmath> 19 20 using namespace std; 21 22 const int maxn = 11111; 23 char ca[maxn], cb[maxn], cs[maxn]; 24 25 void add(char* ca, char* cb) { 26 int a[maxn]; 27 int b[maxn]; 28 memset(a, 0, sizeof(a)); 29 memset(b, 0, sizeof(b)); 30 int la = strlen(ca); 31 int lb = strlen(cb); 32 for(int i = 0; i < la; i++) a[i] = ca[la-i-1] - '0'; 33 for(int i = 0; i < lb; i++) b[i] = cb[lb-i-1] - '0'; 34 for(int i = 0; i < maxn; i++) { 35 a[i] += b[i]; 36 a[i+1] += a[i] / 10; 37 a[i] %= 10; 38 } 39 int p = maxn; 40 while(p--) if(a[p] != 0) break; 41 for(int i = p; i >= 0; i--) printf("%d", a[i]); 42 printf(" "); 43 } 44 45 void sub(char* ca, char* cb) { 46 int a[maxn]; 47 int b[maxn]; 48 memset(a, 0, sizeof(a)); 49 memset(b, 0, sizeof(b)); 50 int la = strlen(ca); 51 int lb = strlen(cb); 52 for(int i = 0; i < la; i++) a[i] = ca[la-i-1] - '0'; 53 for(int i = 0; i < lb; i++) b[i] = cb[lb-i-1] - '0'; 54 for(int i = 0; i < la; i++) { 55 if(a[i] >= b[i]) a[i] -= b[i]; 56 else { 57 a[i] = a[i] - b[i] + 10; 58 a[i+1]--; 59 } 60 } 61 int p = maxn; 62 while(p--) if(a[p] != 0) break; 63 for(int i = p; i >= 0; i--) printf("%d", a[i]); 64 printf(" "); 65 } 66 67 int main() { 68 // freopen("in", "r", stdin); 69 memset(ca, 0, sizeof(ca)); 70 memset(cb, 0, sizeof(cb)); 71 scanf("%s %s", ca, cb); 72 int la = strlen(ca); 73 int lb = strlen(cb); 74 if(ca[0] == '0' && cb[0] == '0') printf("0 "); 75 else if(ca[0] == '-' && cb[0] == '-') { 76 printf("-"); 77 add(ca+1, cb+1); 78 } 79 else if(ca[0] != '-' && cb[0] != '-') add(ca, cb); 80 else if(ca[0] == '-' && cb[0] != '-') { 81 if(la - 1 < lb) sub(cb, ca+1); 82 else if(strcmp(ca+1, cb) > 0) { 83 printf("-"); 84 sub(ca+1, cb); 85 } 86 else if(strcmp(ca+1, cb) == 0) printf("0 "); 87 else sub(cb, ca+1); 88 } 89 else if(ca[0] != '-' && cb[0] == '-') { 90 if(la - 1 < lb) sub(ca, cb+1); 91 else if(strcmp(ca, cb+1) > 0) sub(ca, cb+1); 92 else if(strcmp(ca, cb+1) == 0) printf("0 "); 93 else { 94 printf("-"); 95 sub(cb+1, ca); 96 } 97 } 98 return 0; 99 }