我想计算两个数字之间的差值(比方说 v
和 n
,所以 v-n
)使用数组(不要问为什么我必须这样做)。每个数字的数组按以下方式制作:
- 它们的容量是
v
和n
之间最大数的位数(代码中=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]
代码中有什么问题?
注意: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]
最佳答案
我相信我了解数据结构,因为您使用的是大整数 表示。
给定数字: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/