c++ - 使用数组减去数字 - C++

标签 c++ arrays logic

我想计算两个数字之间的差值(比方说 vn,所以 v-n)使用数组(不要问为什么我必须这样做)。每个数字的数组按以下方式制作:

  • 它们的容量是vn之间最大数的位数(代码中=q)
  • vArray[i] = i v 的第 digit,除了前导零以填充整个数组
  • nArray[i] = - n 的第 i 个数字,除了前导零以填充整个数组

例如,选择v = 10 and n = 2,

vArray = [1,0]
nArray = [0,-2]

所以我写了这段代码来计算 sum 数组,它等于差的数字(sum = [0,9] 上面的例子) :

long r = 0;
for (int i = q-1 ; i > -1; i--){
    sum[i] = vArray[i] + nArray[i];
    if (sum[i] < 0){
        r = floor(sum[i]/10);
        sum[i-1] -= r;
        sum[i] = sum[i]+10;
    }else{
        r = 0;
    }

    NSLog(@"%li",sum[i]);
}

问题是 sum 数组不等于它应该的值。同样的例子,sum = [1,8] 代码中有什么问题?

注意:vArraynArray 已正确生成。

编辑:一些示例和预期结果

    v =  |    n =   |  vArray =   |     nArray=    |    sum=
    25   |    9     |    [2,5]    |      [0,9]     |    [1,6]
    105  |    10    |   [1,0,5]   |     [0,1,0]    |   [0,9,5]
   1956  |   132    |  [1,9,5,6]  |    [0,1,3,2]   |  [1,8,2,4]
  369375 |   6593   |[3,6,9,3,7,5]|  [0,0,6,5,9,3] |[3,6,2,7,8,2]

最佳答案

我相信我了解数据结构,因为您使用的是大整数 表示。

给定数字:1234

您的 V 数组是:[1, 2, 3, 4]。

要添加所有数字(又名总和),我不明白你为什么要这样做,是:

int digit_sum = 0;
for (int i = 0;  i < 4; i++)
{
    digit_sum += v[i];
} 

要将表示转换为“正常”,试试这个:

int value = 0;
for (int i = 0; i < 4; ++i)
{
  value = (value * 10) + v[i];
}

要执行减法,您必须像手动执行操作一样执行这些步骤。此外,您还需要第二个号码。

编辑 1:大数减法链接
这可能有帮助:
Big Number Subtraction in C
C++ Large Number Arithmetic

关于c++ - 使用数组减去数字 - C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15006080/

相关文章:

c++ - 如何强制用户在从菜单中选择之前输入一些数字?

c++ - 从VB6调用C dll,其中dll是使用Visual Studio 2013编写的

c - 为什么 char 数组的两个元素的内存地址差异为 4?

java - 无限循环。拖延程序

haskell - 如何简化这种模式匹配?

c++ - 多线程事件调度

c++ - 一个类的方法覆盖另一个类的所有方法

c++ - 获取和设置二维数组对象值 (C++)

arrays - 基本 perl : regex statement not working in perl 5. 10.1 机器但在 5.18 中工作?

java - 改进广度优先逻辑