#include <stdio.h> #include <string.h> #include <stdlib.h> #define MaxSize 1000 char *TwoBigNumPlus(char *InputAddend_1,char *InputAddend_2) { char *Result = malloc(MaxSize*sizeof(char)); int ResultEnd = 0; int AddendLen_1 = strlen(InputAddend_1); int AddendLen_2 = strlen(InputAddend_2); int Addend_1[MaxSize]; int Addend_2[MaxSize]; memset(Addend_1,0,sizeof(Addend_1)); memset(Addend_2,0,sizeof(Addend_2)); //reverse to store int InputAddendEnd,AddendEnd; for(InputAddendEnd = AddendLen_1-1,AddendEnd = 0;InputAddendEnd >= 0;InputAddendEnd --) { Addend_1[AddendEnd ++] = InputAddend_1[InputAddendEnd] - '0'; } for(InputAddendEnd = AddendLen_2-1,AddendEnd = 0;InputAddendEnd >= 0;InputAddendEnd --) { Addend_2[AddendEnd ++] = InputAddend_2[InputAddendEnd] - '0'; } //Plus && Carry for(AddendEnd = 0;AddendEnd < MaxSize;AddendEnd ++) { Addend_2[AddendEnd] += Addend_1[AddendEnd]; if(Addend_2[AddendEnd] >= 10) { Addend_2[AddendEnd+1] += Addend_2[AddendEnd] / 10; Addend_2[AddendEnd] %= 10; } } //store to return //0 screening for(AddendEnd = MaxSize-1;AddendEnd>=0 && Addend_2[AddendEnd]==0;AddendEnd --) ; if(AddendEnd >= 0) { for( ;AddendEnd >= 0;AddendEnd --) { Result[ResultEnd++] = Addend_2[AddendEnd] + '0'; } } else { Result[ResultEnd++] = '0'; } Result[ResultEnd] = '