首页 > 代码库 > 简单实现大数相加

简单实现大数相加

思路:

使用字符串来表示大数,然后对两个数字字符串使用类似列竖式的方式进行逐位相加求和。

123 +

  24

_____

 147

具体实现:

char* BigNumberAddition(const char* number1, const char* number2){    if (!number1 || !number2)    {        return NULL;    }    int len1 = strlen(number1);    int len2 = strlen(number2);    //两个数相加 结果的位数 为大数的位数 或 大数的位数+1     int result_len = max(len1,len2) + 1;    char* result = (char*)malloc(result_len + 1);    memset(result,0,result_len + 1);    int index = result_len;    --index;    --len1;    --len2;    while (len1 >= 0 && len2 >= 0)    {        //逐位相加        result[index] += (number1[len1] - 0) + (number2[len2] - 0);        if (result[index] >= 10)        {            //进位            result[index - 1] += result[index] / 10;            result[index] = result[index] % 10;        }        --index;        --len1;        --len2;    }    while(len1 >= 0)    {        result[index] += (number1[len1] - 0);        if (result[index] >= 10)        {            //进位            result[index - 1] += result[index] / 10;            result[index] = result[index] % 10;        }        --len1;        --index;    }    while(len2 >= 0)    {        result[index] += (number2[len2] - 0);        if (result[index] >= 10)        {            //进位            result[index - 1] += result[index] / 10;            result[index] = result[index] % 10;        }        --len2;        --index;    }    //去掉首位的0     int gap = result[0] == 0 ? 1 : 0;    for (int i = 0; i < result_len; i++)    {        result[i] = result[i + gap] + 0;    }    result[result_len - gap] = \0;    return result;}

注意:

1、逐位相加的时候要考虑进位

2、一般两个数相加,如:数1的位数为a, 数2的位数为b,则相加的结果位数可能为 max(a,b) 或 max(a,b) +1. 所以要注意相加结果首位可能是0.

3、用字符串表示数字的时候,是用字符表示数字的  0 --> ‘0‘ ,所以在相加计算的时候要将字符转换为对应的数字。

 

int _tmain(int argc, _TCHAR* argv[])
{
    char* number1 = "9999999";
    char* number2 = "9999999";
    char* result = BigNumberAddition(number1,number2);
    cout << result;
    free(result);

    return 0;

}

 

运行结果:

 

简单实现大数相加