兩個超大數相加演算法
阿新 • • 發佈:2019-02-08
#include <stdio.h> #include <string.h> #include <stdlib.h> /************************************************************************/ /* 功能:實現兩個超大數相加 /* 引數:source1 -- 被加數,字元型陣列,如12 /* source2 -- 加數,字元型陣列, /* result -- 存放和,字元型陣列 /************************************************************************/ void Add(char *source1, char *source2, char *result) { int len1 = strlen(source1); int len2 = strlen(source2); int len = len1 >= len2 ? len1 : len2; int i = len1 - 1, j = len2 - 1, k = 0; char *temp = (char *)malloc(sizeof(char) * (len + 2)); char x, y, z; int carryBit = 0; while (i >= 0 || j >= 0) { if (i < 0) x = '0'; else x = source1[i]; if (j < 0) y = '0'; else y = source2[j]; z = x + y - '0' - '0' + carryBit; temp[k++] = z % 10 + '0'; carryBit = z / 10; i--; j--; } while (carryBit) { temp[k++] = carryBit % 10 + '0'; carryBit /= 10; } for (--k, i = 0; k >= 0; k--, i++) { result[i] = temp[k]; } result[i] = '\0'; free(temp);// 釋放記憶體 } int main() { char source1[1000]; char source2[1000]; char result[1100]; scanf("%s%s", source1, source2); Add(source1, source2, result); printf("%s\n", result); return 0; }