我想计算两个数字之间的差异(让我们说v
和n
,所以v-n
)使用数组(不要问为什么我必须这样做)。每个数字的数组按以下方式进行:
v
和n
(= q
之间的最大数字位数)vArray[i]
= i
v
的数字,除了前导零以填满整个数组nArray[i]
= - i
n
的数字,但前导零填充整个数组例如,选择v
= 10和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]
代码中的问题是什么?
注意:vArray
和nArray
已正确生成。
编辑:一些例子和预期结果
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]
答案 0 :(得分:2)
我相信我理解数据结构,因为您正在使用 Big Integer 表示。
鉴于数字:1234
你的V阵列是:[1,2,3,4]。
要添加所有数字(a.k.a. sum),我不明白为什么要这样做,是:
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