Plataforma: URI
Problema: 1120
Enunciado:
Durante anos, todos os contratos da Associação de Contratos da Modernolândia (ACM) foram datilografados em uma velha máquina de datilografia. Recentemente Sr. Miranda, um dos contadores da ACM, percebeu que a máquina apresentava falha em um, e apenas um, dos dígitos numéricos. Mais especificamente, o dígito falho, quando datilografado, não é impresso na folha, como se a tecla correspondente não tivesse sido pressionada. Ele percebeu que isso poderia ter alterado os valores numéricos representados nos contratos e, preocupado com a contabilidade, quer saber, a partir dos valores originais negociados nos contratos, que ele mantinha em anotações manuscritas, quais os valores de fato representados nos contratos. Por exemplo, se a máquina apresenta falha no dígito 5, o valor 1500 seria datilografado no contrato como 100, pois o 5 não seria impresso. Note que o Sr. Miranda quer saber o valor numérico representado no contrato, ou seja, nessa mesma máquina, o número 5000 corresponde ao valor numérico 0, e não 000 (como ele de fato aparece impresso).
Linguagem: C
Solução:
Nesta solução, criei uma função getTamanho para não precisar incluir a biblioteca string.h e obter o tamanho da cadeia de caracteres informada. Utilizei um array resposta para obter os dígitos informados, exceto quando o dígito é igual a n, portanto ele tem a resposta e é só imprimi-lo. O caso em que j == i é o último caso, para imprimir zero e quebrar a linha.
#include <stdio.h> int getTamanho(char *palavra) { int i = 0; while (palavra[i] != '\0') i++; return i; } int main() { int n, i, j, k, digito; char str[101], resposta[101]; while (scanf("%i %s", &n, str) != EOF) { if (n == 0 && !strcmp(str, "0")) exit(0); for (i = 0, j = 0; i < getTamanho(str); i++) { digito = str[i] - '0'; if (n != digito) resposta[j++] = str[i]; } for (i = 0; i < j; i++) if (resposta[i] != '0') break; if (j == i) printf("0\n"); else { for (k = i; k < j; k++) printf("%c", resposta[k]); printf("\n"); } } return 0; }