实现大整数加法,第二个程序写得比第一个程序简洁,虽然两个程序的功能是一样的。
第一个程序:
#include <stdio.h>
#include <string.h>
#include <assert.h>
//using namespace std;
void bigIntPlus (char* numA, char* numB, char* result)
{
assert(numA!=NULL && numB!=NULL && result!=NULL);
int Alen = strlen(numA);
int Blen = strlen(numB);
int maxlen = Alen > Blen ? Alen : Blen;
int minlen = Alen < Blen ? Alen : Blen;
int i;
char tmp;
for(i=0; i<Alen/2; i++)
{
tmp = numA[i];
numA[i] = numA[Alen-i-1];
numA[Alen-i-1] = tmp;
}
for(i=0; i<Blen/2; i++)
{
tmp = numB[i];
numB[i] = numB[Blen-i-1];
numB[Blen-i-1] = tmp;
}
int flag = 0;
for(i=0; i<maxlen; i++)
{
if(i < minlen)
result[i] = numA[i] + numB[i] + flag - '0';
else if (Alen == minlen)
result[i] = numB[i] + flag;
else
result[i] = numA[i] + flag;
flag = (result[i]-'0')/10;
result[i] = (result[i]-'0')%10 + '0';
}
int resultlen;
if(flag)
{
result[i] = '1';
result[i+1] = '\0';
resultlen = i+1;
}
else
{
result[i] = '\0';
resultlen = i;
}
for(i=0; i<resultlen/2; i++)
{
tmp = result[i];
result[i] = result[resultlen-i-1];
result[resultlen-i-1] = tmp;
}
}
int main (void)
{
char numA[128], numB[128], result[128];
printf("Please input numA:");
gets(numA);
printf("Please input numB:");
gets(numB);
bigIntPlus(numA, numB, result);
printf("result is %s.\n", result);
return 0;
}
第二个程序:
#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <stdlib.h>
//using namespace std;
void bigIntPlus (char* numA, char* numB, char* result)
{ //we should not change numA and numB's value
assert(numA!=NULL && numB!=NULL && result!=NULL);
int Alen = strlen(numA);
int Blen = strlen(numB);
int maxlen = Alen > Blen ? Alen : Blen;
char* tmpA = (char*)calloc(maxlen+1, sizeof(char));
char* tmpB = (char*)calloc(maxlen+1, sizeof(char));
int i;
for (i=0; i<Alen; i++)
{
tmpA[i]=numA[Alen-i-1]-'0';
}
for (i=0; i<Blen; i++)
{
tmpB[i]=numB[Blen-i-1]-'0';
}
for (i=0; i<maxlen; i++)
{
tmpA[i] += tmpB[i];
if (tmpA[i] > 9)
{
tmpA[i]%=10;
tmpA[i+1]++;
}
}
int resultlen = maxlen + (tmpA[maxlen]? 1:0);
for(i=0; i<resultlen; i++)
{
result[i]=tmpA[resultlen-i-1] + '0';
}
result[resultlen] = '\0';
free(tmpA);
free(tmpB);
}
int main (void)
{
char numA[128], numB[128], result[128];
printf("Please input numA:");
gets(numA);
printf("Please input numB:");
gets(numB);
bigIntPlus(numA, numB, result);
printf("result is %s.\n", result);
return 0;
}