Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 算术地添加两个字符串_C++_String - Fatal编程技术网

C++ 算术地添加两个字符串

C++ 算术地添加两个字符串,c++,string,C++,String,我试图实现一个函数来添加两个过大的数字,比如说存储在字符串中的1000位长的数字。我在正确转换时遇到问题,因此我可以正确添加数字 到目前为止,我所做的就是: string addBegin (string low, string high, int diff) { for (int i = 0; i <= diff; i++) low = "0" + low; high = "0" + high; cout << "low: " <

我试图实现一个函数来添加两个过大的数字,比如说存储在字符串中的1000位长的数字。我在正确转换时遇到问题,因此我可以正确添加数字

到目前为止,我所做的就是:

string addBegin (string low, string high, int diff)
{
    for (int i = 0; i <= diff; i++)
        low = "0" + low;
    high = "0" + high;

    cout << "low: " << low << "\nhigh: " << high << endl;

    string result;
    int sum, carry = 0;

    for (int i = low.length()-1; i >= 0; i--)
    {
        sum = (int)low[i] + (int)high[i] + carry;
        carry = 0;
        if (sum > 9)
        {
            sum -= 10;
            carry = 1;
        }
        result = to_string(sum) + result;
    }

    return result;
}

string add (string a, string b)
{
    int diff = a.length() - b.length();

    if (diff <= 0) return addBegin(a, b, abs(diff));
    else return addBegin(b, a, diff);
}

int main (void)
{
    string x = add("52","205");
    cout << "result: " << x << endl;

    return 0;
}
这里的结果由4个数字组成:87、89、92和93。这显然是错误的,我用ASCII值做了一些不需要的加法。有没有办法让这一切顺利进行?或者,有没有什么简单可笑的方法可以把两个非常长的数字相加?

做数学计算时,别忘了从低[i]和高[i]中减去“0”

intlow[i]是0x30..0x39,表示字符“0”..9.

在计算时,不要忘记从低[i]和高[i]中减去“0”

对于字符“0”…“9”,intlow[i]是0x30..0x39

这将添加字符编码的值,例如ASCII。您希望从编码中减去“0”以获得数值

    sum = low[i] - '0' + high[i] - '0' + carry;
这将添加字符编码的值,例如ASCII。您希望从编码中减去“0”以获得数值

    sum = low[i] - '0' + high[i] - '0' + carry;

问题是你使用

sum = (int)low[i] + (int)high[i] + carry;
应该是哪一个

sum = low[i] - '0' + high[i] - '0' + carry;

问题是你使用

sum = (int)low[i] + (int)high[i] + carry;
应该是哪一个

sum = low[i] - '0' + high[i] - '0' + carry;

请帮助我理解,如果它们是整数,而不是字符串,那么结果是否=低+高?唯一需要注意的是数字太长了吗?当遇到这样的问题时,试着用小数字思考。例如,为了添加5+4,算法应该做什么?然后,75+46?我不明白,所以我只是想问一下——如果你只想把两个大数字相加,为什么不能用它们作为大整数而不是字符串,然后进行加法呢?@Bill A bigint只是另一个数字基中的字符串:这是一个常见的练习。@IlyaKogan当然,但我不认为这是这里的主要问题。如果我将75+46相加,我希望得到的是5+6的和,而不是它们的ASCII值的和。请帮助我理解,如果它们是整数,而不是字符串,结果是否为低+高?唯一需要注意的是数字太长了吗?当遇到这样的问题时,试着用小数字思考。例如,为了添加5+4,算法应该做什么?然后,75+46?我不明白,所以我只是想问一下——如果你只想把两个大数字相加,为什么不能用它们作为大整数而不是字符串,然后进行加法呢?@Bill A bigint只是另一个数字基中的字符串:这是一个常见的练习。@IlyaKogan当然,但我不认为这是这里的主要问题。如果我将75+46相加,我希望得到5+6的和,而不是它们的ASCII值的和。Aaaaand。工作解决方案诞生了。我记得做过类似的事情,但似乎并不完全正确。谢谢。我怀疑结果中有额外的前导“0”,您可能需要有条件地删除它。@chux是的,我很清楚这一点。谢谢aaaand。工作解决方案诞生了。我记得做过类似的事情,但似乎并不完全正确。谢谢。我怀疑结果中有额外的前导“0”,您可能需要有条件地删除它。@chux是的,我很清楚这一点。谢谢