Hola buenas, veréis tengo que tratar de crear un programa que compla la siguiente precondición y postcondición:
/*
* Pre: <a> y <b> almacenan sendas cadenas de caracteres con la secuencia
* de dígitos de dos números naturales seguidos por el carácter NUL,
* cuyo código ASCII es el '\0'. Sea nA el número de dígitos de <a>
* y nB el número de dígitos de <b>. Los caracteres a[nA-1] y b[nB-1]
* representan las unidades, los caracteres a[nA-2] y b[nB-2] las decenas y
* así sucesivamente y, finalmente, los caracteres a[0] y b[0] representan
* los dígitos mas significativos de <a> y <b>, respectivamente.
* Post: <suma> almacena la secuencia de dígitos de la suma de los naturales
* representados por <a> y <b>. Sea nS el número de dígitos de suma.
* El carácter suma[nS-1] representa las unidades de la suma, el carácter
* suma[nS-2] representa las decenas y así sucesivamente y, finalmente,
* el carácter suma[0] representa el dígito más significativo de la suma.
*/
EL comienzo de la función es este :
void sumar (const char a[], const char b[], char suma[]){
He intentado enfocarlo de diversas maneras pero finalmente en vano, si alguien tiene una idea sorbre como enfocarlo agradecería mucho su ayuda.
Adjunto también el código que he intentado hacer pero que no ha funcionado por si veis algún fallo:
int Long_a = strlen(a);
int Long_b = strlen(b);
if (Long_a == Long_b){
bool seLlevaUna = false;
int acarreo;
for(int i= Long_a -1; i >= 0; i--){
char ResSuma = (a - '0') + (b - '0');
if(seLlevaUna = true){
acarreo = '1';
} else {acarreo = '0';}
if(ResSuma >= '10'){ seLlevaUna = true;
suma = ResSuma - '10'+ acarreo;}
else { seLlevaUna = false;
suma = ResSuma + acarreo;
}
}
} else{
int diferencia_long;
if(Long_a > Long_b){
diferencia_long = Long_a - Long_b;
for(int i = Long_a-1; i >=0; i--){
suma = (a - '0')+(b[i-diferencia_long] - '0');
}
}
else{diferencia_long = Long_b-Long_a;
for(int i = Long_b-1; i >=0; i--){
suma = (b - '0')+(a[i-diferencia_long] - '0');
}
}
}
}
Gracias por adelantado, un saludo.