两个大数相加

两个大数相加,暂时选择简单版本,使用两个正整数相加,直接上代码了,不再啰嗦了。


#include <iostream>

#define MAXNUM 10000

bool inspectCharValid(char* value);
void add(char* num1, char* num2, char* result);

int main(int argc, char* argv[])
{
    char num1[MAXNUM] = {0};
    char num2[MAXNUM] = {0};

    std::cout << "请输入一个正整数:" << std::endl;
    std::cin >> num1;

    if (!inspectCharValid(num1))
    {
        std::cout << "输入的整数不符合要求." << std::endl;
        return -1;
    }

    std::cout << "请输入一个正整数:" << std::endl;
    std::cin >> num2;

    if (!inspectCharValid(num1))
    {
        std::cout << "输入的整数不符合要求." << std::endl;
        return -1;
    }

    char result[MAXNUM] = {0};

    add(num1, num2, result);

    std::cout << "两个整数相加结果: " << result << std::endl;


    
    return 0;
}

bool inspectCharValid(char* value)
{
    for (int i = 0; *(value + i); ++i)
    {
        if (*(value + i ) < '0' || *(value + i) > '9')
        {
            return false;
        }
    }
    
    return true;
}

void add(char* num1, char* num2, char* result)
{
    int sum = 0;
    int carry = 0;

    int len1 = strlen(num1);
    int len2 = strlen(num2);

    int maxLen = len1 > len2 ? len1 : len2;
    for (int i = 0; i < maxLen; ++i)
    {
        sum = carry;
        if (len1 > i)
        {
            sum += num1[len1 - i - 1] - '0';
        }
        if (len2 > i)
        {
            sum += num2[len2 - i - 1] - '0';
        }

        if (sum < 10)
        {
            carry = 0;
            result[maxLen - i - 1] = sum + '0';
        }
        else
        {
            carry = sum/10;
            result[maxLen - i - 1] = sum%10 + '0';
        }
    }

    if (carry > 0)
    {
        for (int i = 0; i < maxLen; ++i)
        {
            result[maxLen - i] = result[maxLen - i - 1];
        }

        result[0] = carry + '0';
    }
}

测试结果如下:

请输入一个正整数:
123
请输入一个正整数:
3456
两个整数相加结果: 3579
Press any key to continue


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值