#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,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] = ‘\0‘; return Result; } int main() { char InputAddend_1[MaxSize] = "99"; char InputAddend_2[MaxSize] = "99999999"; char *Result = TwoBigNumPlus(InputAddend_1,InputAddend_2); puts(Result); return 0; }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。