加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

两个大数相加

发布时间:2020-12-14 03:01:32 所属栏目:大数据 来源:网络整理
导读:两个大数相加,暂时选择简单版本,使用两个正整数相加,直接上代码了,不再啰嗦了。 #include iostream#define MAXNUM 10000bool inspectCharValid(char* value);void add(char* num1,char* num2,char* result);int main(int argc,char* argv[]){ char num1[

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


#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* 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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读