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:
Basta verificar se o dígito atual é igual ao número n. Se não for, salva na string resposta. Foi feito também um teste de zeros à esquerda, pois eles devem ser descartados.
#include <iostream> using namespace std; int getTamanho(string palavra) { int i = 0; while (palavra[i] != '\0') i++; return i; } int main() { int n; string str; while (cin >> n >> str) { if (n == 0 && !str.compare("0")) exit(0); string resposta = ""; for (int i = 0; i < getTamanho(str); i++) { int digito = str[i] - '0'; if (n != digito) resposta.append(1, str[i]); } int zerosAEsquerda; for (zerosAEsquerda = 0; zerosAEsquerda < getTamanho(resposta); zerosAEsquerda++) if (resposta[zerosAEsquerda] != '0') break; string final = resposta.substr(zerosAEsquerda, getTamanho(resposta)); if (getTamanho(final) == 0) final = "0"; cout << final << endl; } return 0; }
Nenhum comentário:
Postar um comentário