大数相加考虑到数据长度有限,因此采用字符串的方式进行计算,还要考虑到进位的问题,看下代码:
void big_data_add(char * num1, char * num2)
{
int length, length1, length2;
int i, j;
int intNum1[MAX_LEN] = {0};
int intNum2[MAX_LEN] = {0};
if (num1 == NULL || num2 == NULL)
{
return;
}
length1 = strlen(num1);
length2 = strlen(num2);
length = length1 > length2 ? length1 : length2;
for (j = length, i = 0; i < length1; i++, j--)
{
intNum1[j] = num1[length1 - i - 1] - '0';
}
for (j = length, i = 0; i < length2; i++, j--)
{
intNum2[j] = num2[length2 - i - 1] - '0';
}
for (i = length; i >= 0; i--)
{
intNum1[i] += intNum2[i];
if (intNum1[i] >= 10)
{
intNum1[i] -= 10;
intNum1[i - 1]++;
}
}
printf("the sun of num1 and num2 is: ");
if (intNum1[0] == 0)
{
for (i = 1; i <= length; i++)
{
printf("%d", intNum1[i]);
}
}
else
{
for (i = 0; i <= length; i++)
{
printf("%d", intNum1[i]);
}
}
printf("\n");
}
验证程序:
#include <stdio.h>
#include <string.h>
#define MAX_LEN 256
int main()
{
char num1[MAX_LEN];
char num2[MAX_LEN];
printf("Enter num1: ");
gets_s(num1);
printf("Enter num2: ");
gets_s(num2);
big_data_add(num1, num2);
return 0;
}
输出结果: