#include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdbool.h> #define MaxSize 10000 bool _DividendIsLarger(int *Dividend,int *Divisor,int DividendLen,int DivisorLen) { int DivisorLenEnd; if(DividendLen < DivisorLen) { return false; } else if(DividendLen == DivisorLen) { for(DivisorLenEnd = DividendLen - 1;DivisorLenEnd >= 0;DivisorLenEnd --) { if(Dividend[DivisorLenEnd] < Divisor[DivisorLenEnd]) { return false; } } } return true; } //sub's result store in Dividend[],return the length of Dividend[] int _TwoBigNumSub(int *Dividend,int *Divisor,int DividendLen,int DivisorLen) { //judge if Dividend > Divisor,else return -1 bool Judger = _DividendIsLarger(Dividend,Divisor,DividendLen,DivisorLen); if(! Judger) { return -1; } //do the Sub int DivisorEnd; for(DivisorEnd = 0;DivisorEnd < DividendLen;DivisorEnd ++) { Dividend[DivisorEnd] -= Divisor[DivisorEnd]; if(Dividend[DivisorEnd] < 0) { Dividend[DivisorEnd] += 10; Dividend[DivisorEnd+1] --; } } for(DivisorEnd = DividendLen-1;DivisorEnd >= 0;DivisorEnd --) { if(Dividend[DivisorEnd]) { return (DivisorEnd + 1); } } return 0; } char *TwoBigNumDivision(char *InputDividend,char *InputDivisor) { int *TempResult = malloc(MaxSize*sizeof(int)); memset(TempResult,0,MaxSize*sizeof(int)); char *Result = malloc(MaxSize*sizeof(char)); memset(Result,0,MaxSize*sizeof(char)); int ResultEnd = 0; int DividendLen = strlen(InputDividend); int DivisorLen = strlen(InputDivisor); int Dividend[MaxSize]; int Divisor[MaxSize]; memset(Dividend,0,sizeof(Dividend)); memset(Divisor,0,sizeof(Divisor)); //reverse to store int InputDivisorEnd,DivisorEnd; for(InputDivisorEnd = DividendLen-1,DivisorEnd = 0;InputDivisorEnd >= 0;InputDivisorEnd --) { Dividend[DivisorEnd ++] = InputDividend[InputDivisorEnd] - '0'; } for(InputDivisorEnd = DivisorLen-1,DivisorEnd = 0;InputDivisorEnd >= 0;InputDivisorEnd --) { Divisor[DivisorEnd ++] = InputDivisor[InputDivisorEnd] - '0'; } //special discuss for zero && one time sub if(! _DividendIsLarger(Dividend,Divisor,DividendLen,DivisorLen)) { Result[ResultEnd++] = '0'; Result[ResultEnd++] = '