J'ai le problème suivant. Supposons que j'ai aux tableaux X et Y dont les entrées se composent de nombres entiers dans la gamme de 0 à 9 commeAjout de tableaux de chiffres comme s'ils représentaient des nombres
X = [1 2 3]
Y = [7 0 9]
Je veux penser de ces réseaux comme étant les chiffres de base 10 numéros, de sorte que X représente le numéro 123 et Y représente le nombre 709. Je veux écrire un programme qui sort les chiffres de la somme de ces entiers. Ainsi, dans l'exemple donné, il doit envoyer le tableau
Z = [8 3 2]
depuis 123 + 709 = 832. Pour des raisons de cette question, il suffit de supposer que X et Y ont la même longueur, à savoir que les chiffres qu'ils représentent avoir le même nombre de chiffres. Pendant que je fais cela, je veux aussi garder une trace des portées qui ont été effectuées lors de l'addition. Ainsi, dans l'exemple, je veux aussi à la sortie
C = [0 0 1]
ce qui représente que je devais porter un 1 quand j'ai ajouté les chiffres 9 + 3 = 12, mais que les additions des chiffres dans d'autres postes sont allés à travers sans porte. Donc, ma question principale est
- Est-ce que quelqu'un connaît un moyen simple d'atteindre cet objectif en utilisant MATLAB?
Jusqu'à présent, ce que je suis venu avec est le code suivant qui est donné les deux nombres que X et 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
Le problème est que le code ne fonctionne que parfois. Par exemple, il n'a aucun problème à travailler à travers l'exemple que j'ai donné plus haut, que 123 + 709 = 832 avec un "carry array" de [0 0 1]. Mais l'entrée X = 52514 et Y = 41525 ne donne pas les bons résultats. Donc ma question de suivi est
- Quelqu'un voit-il le bogue dans le code ci-dessus/comment puis-je le corriger?
Bien sûr. Fonctionne parfaitement. Merci! –