1120 - Revisão de Contrato

Um bom exercício para treinar expressões regulares nas linguagens que possuem suporte para tal.

Descrição

Solução

Podemos dividir esse problema em dois passos:

  1. Criar uma nova string com os mesmos caracteres que a string passada, só que sem o caractere ignorado;

  2. Retirar os zeros à frente da string resultante, seja manualmente ou usando a expressão regular /^(0+)/, que checa se há um ou mais zeros à frente da string formada.

É muito importante manter a string o tempo todo sem converter para inteiro porque não vai caber.

#include <string.h>
#include <stdio.h>

int main(){
    int n, p;
    char D, N[101], resposta[101];

    while(scanf("%c %s\n", &D, &N) != EOF){
        if(D == '0' && !strcmp(N, "0"))    break;

        p = 0;
        n = strlen(N);
        memset(resposta, '\0', sizeof(resposta));

        for(int i = 0; i < n; ++i){
            if(N[i] != D)   resposta[p++] = N[i];
        }

        p = 0;
        n = strlen(resposta);
        while(p < n){
            if(resposta[p] != '0')  break;
            ++p;
        }

        if(p == n){
            printf("0\n");
        }else{
            strcpy(resposta, resposta + p);
            printf("%s\n", resposta);
        }
    }

    return 0;
}

Last updated