Untitled

 avatar
unknown
plain_text
a month ago
1.4 kB
21
Indexable

void multString(char s1[], char s2[], char resultado[]) {
    int l1 = strlen(s1);
    int l2 = strlen(s2);
    int lengthFinal = l1 + l2;
    int carry;
    int multiplicacaoAtual;
    int digito;

    for (int i = 0; i < lengthFinal; i++) {
        resultado[i] = '0';
    }
    resultado[lengthFinal] = '\0';

    for (int i = l1 - 1; i >= 0; i--) {
        carry = 0;
        for (int j = l2 - 1; j >= 0; j--) {
            // Converte os caracteres para inteiros e multiplica
            multiplicacaoAtual = (s1[i] - '0') * (s2[j] - '0') + (resultado[i + j + 1] - '0') + carry;
            carry = multiplicacaoAtual / 10;
            digito = multiplicacaoAtual % 10;
            resultado[i + j + 1] = digito + '0';
        }
        resultado[i] += carry;
    }

    // Formatar a string para começar no indice 0 com os valores que interessam
    int k = 0;
    while (k < lengthFinal && resultado[k] == '0') {
        k++;
    }
    if (k != lengthFinal) {
        for (int i = k; i < lengthFinal; i++) {
            resultado[i - k] = resultado[i];
        }
        resultado[lengthFinal - k] = '\0'; // na posição lengthFinal teriamos o '\0', como fizemos a translação dos k '0's então retiramos o valor.
    } 
    else {  // se só tiver 0 na string corresponde ao próprio número 0
        resultado[0] = '0'; 
        resultado[1] = '\0';
        }
    }
Editor is loading...
Leave a Comment