我如何减去等位大数?

How do i subtract equal digit large numbers?

我已经减去了数字长度不相等的大数字,但我不能减去相等的数字 length.I 我从用户那里输入了一个 2 字符串作为数字,我正在将它转换成整数array using str[i]-'0'.Till now I have swapped values of smaller length - bigger length integers.I have to do subtraction for 50 digit numbers.I 可以做不等长度的减法 strings.But, 如果数字长度相等,我无法做到 that.I 不能使用 atoi function.What 我所做的是将字符串转换为整数数组,然后我在 sub_logic 中使用减法逻辑进行减法 这是我减去等位数的逻辑。

Semi-answer 因为当更简单的方法可行时,我想不出调试 Asker 算法的好理由。

这是你表现得像 child 的好机会。

  1. 将数字保留为 strings1
  2. 通过在最短的前面加上零来使它们大小相同。
  3. 如果被减去的数字(减数)是较大的数字,将两个数字反转,这样您总是从较大的数字中减去较小的数字。请注意您颠倒了操作数的顺序。
  4. 从右到左计算,减去数字并根据需要跟踪从较大数字借用的任何内容。
  5. 如果您颠倒了操作数顺序,则将结果标记为负数。

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

而损坏