超大整数减法模板

来源:互联网 发布:java string数组去重 编辑:程序博客网 时间:2024/04/28 14:29
#include <cstdio>#include <iostream>#include <string>using namespace std;#define LENGTH 100#define LAST LENGTH-2char a[LENGTH], b[LENGTH], result[LENGTH];bool LessThan(char *a, char *b){//去除前导'0'for (a; *a == '0'; a++);for (b; *b == '0'; b++);int aLen = strlen(a), bLen = strlen(b);if (aLen == bLen){for (a, b; *a == *b && *a != '\0'; a++, b++);return *a < *b;}return aLen < bLen;}//函数要求minuend大于等于subtraction,difference初始值为0char *IntegerSubtraction(char *minuend, char *subtrahend, char *difference){int i, j, k, first;for (i = strlen(minuend)-1, j = LAST; i >= 0; i--, j--){difference[j] = minuend[i] - '0';}for (i = strlen(subtrahend)-1, k = LAST; i >= 0; i--, k--){difference[k] -= (subtrahend[i] - '0');}//获取difference中结果的首位位置first = j < k ? j : k;for (i = LAST; i >= first; i--){if (difference[i] < 0){difference[i-1]--;difference[i] = difference[i] + 10 + '0';}else{difference[i] += '0';}}//去除前导'0'while (difference[first] == '0' && first < LAST){first++;}return &difference[first];}int main(void){while (cin>>a>>b){memset(result, 0, sizeof(result));if (!LessThan(a, b)){cout<<IntegerSubtraction(a, b, result)<<endl;}else{char *pRes = IntegerSubtraction(b, a, result);//添加负号*--pRes = '-';cout<<pRes<<endl;}}return 0;}