51nod 1005 大数加法

来源:互联网 发布:粮食进出口贸易数据 编辑:程序博客网 时间:2024/06/11 03:26

点这里

注意细节!

#include <iostream>#include <stdio.h>#include <string.h>#include <stdlib.h>#include <math.h>#include <algorithm>#include <string>using namespace std;string tt1;string tt2;char tt3[10010];char tt4[10010];int ff1[10010];int ff2[10010];int ans[10010];int max(int a, int b){if (a >= b)return a;elsereturn b;}int main(){while (cin >> tt1 >> tt2){int f1 = 0, f2 = 0, t = 0;if (tt1[0] == '-')f1 = 1;if (tt2[0] == '-')f2 = 1;memset(ans, 0, sizeof(ans));int len1 = tt1.length(), len2 = tt2.length();if (f1 == 0){for (int i = 0; i < len1; i++){ff1[i] = tt1[len1 - 1 - i] - '0';tt3[i] = tt1[i];}}else{for (int i = 1; i < len1; i++){ff1[i - 1] = tt1[len1 - i] - '0';tt3[i - 1] = tt1[i];}len1--;}if (f2 == 0){for (int i = 0; i < len2; i++){ff2[i] = tt2[len2 - 1 - i] - '0';tt4[i] = tt2[i];}}else{for (int i = 1; i < len2; i++){ff2[i - 1] = tt2[len2 - i] - '0';tt4[i - 1] = tt2[i];}len2--;}int sum, carry = 0, dight;int maxlen = max(len1, len2);for (int i = 0; i < maxlen + 1; i++){sum = carry;if ((f1 == 0 && f2 == 0) || (f1 == 1 && f2 == 1)){sum += ff1[i];sum += ff2[i];}else if (len2>len1){sum += ff2[i];sum -= ff1[i];}else if(len2<len1){sum += ff1[i];sum -= ff2[i];}else{if (strcmp(tt3,tt4)>0){sum += ff1[i];sum -= ff2[i];}else{sum += ff2[i];sum -= ff1[i];}}dight = sum % 10;carry = sum / 10;if (dight < 0){dight += 10;carry = -1;}ans[i] = dight;}int k;for (k = maxlen + 1; k >= 0; k--){if (ans[k] != 0)break;}if ((f1 == 1 && f2 == 1) || (len1>len2&&f1 == 1) || (len2>len1&&f2 == 1) || ((len1 == len2) && strcmp(tt3, tt4)>0 && f1 == 1) || ((len1 == len2) && strcmp(tt3, tt4)<0 && f2 == 1))printf("-");while (k >= 0) { printf("%d", ans[k--]); t = 1; }if (t == 0)printf("0");printf("\n");}return 0;}