我有以下问题。假设我必须数组 X 和 Y 其条目由 0 到 9 范围内的整数组成,例如
X = [1 2 3]
Y = [7 0 9]
我想将这些数组视为以 10 为底的数字的数字,因此 X 代表数字 123,Y 代表数字 709。我想编写一个程序来输出这些整数之和的数字。所以在给出的例子中,它应该输出数组
Z = [8 3 2]
因为 123 + 709 = 832。对于这个问题,假设 X 和 Y 具有相同的长度就足够了,即它们所代表的数字具有相同的位数。当我这样做时,我还想跟踪在添加过程中执行的进位。所以在这个例子中,我也想输出
C = [0 0 1]
这表示当我添加数字 9 + 3 = 12 时我必须携带 1,但是在其他位置添加数字时没有携带。所以我的主要问题是
- 有谁知道使用 MATLAB 实现这一目标的简单方法?
到目前为止,我想出的是以下代码,它给出了两个数字 X 和 Y
clear all; clc;
C = zeros(1, length(X));
for j=length(X):-1:1
if X(j) + Y(j) > 9
C(j) = 1;
end
Z(j) = mod(X(j) + Y(j), 10);
if j < length(X)
if Z(j) + C(j+1) < 9
Z(j) = Z(j) + C(j+1);
else
Z(j) = mod(Z(j) + C(j+1), 10);
C(j) = 1;
end
end
end
if C(1) == 1
Z = [1 Z];
end
Z
C
问题是代码有时只能工作。例如,通过我上面给出的示例,123 + 709 = 832 与 [0 0 1] 的“进位数组”一起工作没有问题。但是输入 X = 52514 和 Y = 41525 不会产生正确的结果。所以我的后续问题是
- 有没有人看到上面代码中的错误/我该如何修复它?