兩個超大數相加算法
#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;
}
最後更新:2017-04-03 18:52:03