超大整数减法模板
2012-11-29 18:25
316 查看
#include <cstdio> #include <iostream> #include <string> using namespace std; #define LENGTH 100 #define LAST LENGTH-2 char 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初始值为0 char *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; }
相关文章推荐
- 大整数运算模板(减法)
- 模板:大整数减法
- 大整数减法(模板)
- 超大整数加法模板
- 超大整数乘法模板(高精度乘以低精度)
- 大整数运算模板(减法)
- 大整数减法模板
- 大整数减法
- 关于Django模板不能运算的临时解决办法 在Django 模板template 中实现加法,减法,乘法,除法运算
- 大整数减法
- 将任意类型映射到一个唯一整数(C++模板实现TypeList)
- OpenJudge 2736 大整数减法 C++
- 11:大整数减法
- 大整数的减法
- 求2^n-char 数组表示超大整数
- C++高精度大整数模板
- 两个超大的整数相加(超过long长度范围)
- 华为机试题——整数减法
- 【大整数模板】
- 大整数运算之 大整数加法、减法、乘法