我如何减去相等数字的大数?

时间:2018-02-15 18:17:53

标签: c++ arrays subtraction

我已经减去了数字长度不相等的大数字,但是我不能减去长度相等的数字。我从用户输入2个字符串作为数字,我使用str将其转换为整数数组i] - '0'。到目前为止,我已经交换了较小长度的值 - 更大的长度整数。我必须对50位数字进行减法。我可以减去不等长度的字符串。但是,如果长度相等,我就是无法做到这一点。我无法使用atoi功能。我所做的是将字符串转换为整数数组然后我在sub_logic中使用减法逻辑进行减法 HEre是我减去相等数字的逻辑。

1 个答案:

答案 0 :(得分:0)

半答案,因为当一种更简单的方法可行时,我无法想出调试Asker算法的充分理由。

这是你像孩子一样行事的好机会。

  1. 将数字保留为string s 1
  2. 通过将零添加到最短的位置来使它们具有相同的大小。
  3. 如果减去的数字(减数)是较大的数字,则反转这两个数字,这样您总是从较大的数字中减去较小的数字。请注意您颠倒了操作数的顺序。
  4. 从右到左工作,减去数字并根据需要跟踪任何借来的大数字。
  5. 如果您颠倒了操作数顺序,请将结果标记为否定。
  6. 1 您不必将字符解析为数字,因为没有合理的字符编码会扰乱数字的排序或定位。 The C++ standard [lex.charset] requires this.

    但是,跟踪借用可能会迫使您使用更大的存储空间,因为您可能会发现自己的数字高达18,而C ++标准并不能保证角色可以存储。如果数字在编码结束时,超过你可以存储在数字中的数字并指望另一个字符在那里将无法工作。这对我所知道的每个字符编码都不是问题,但不能保证。

    你最有可能(假设这里的ASCII)侥幸逃脱

    if (a[index] < b[index]) 
    {
        a[index - 1]--; // a > b as per step 3 above, so this can't happen with last digit.
        a[index] += 10;
    }
    result[index] = '0' + a[index] - b[index];
    

    第4步。我认为这是学校作业的一个很好的假设,但我会更加谨慎使用生产代码,以确保a[index] += 10;不会溢出char

    借来的数字最终会在';'之上通过'a',没有人会关心数学。但它具有破坏性。 a因此而受损