//### Desafio - Produto e divisão |
Você tem a obrigação de testar as calculadores, para que façam apenas operações de multiplicação e divisão. |
Além disso, o termo a ser digitado em cada operação, (o número exibido no visor que será dividido ou multiplicado), só pode conter um |
único dígito. |
Quando ligada, a calculadora exibe o número 1. Após isso, o usuário pode digitar um número com um único dígito e escolher se esse número |
deve multiplicar ou dividir o número exibido anteriormente; o resultado da operação escolhida é então exibido na calculadora. |
Pode-se repetir esse processo quantas vezes quiser. |
Apesar de ser permitido apenas números inteiros de um dígito, a calculadora permite exibir números com múltiplos dígitos e até mesmo números |
fracionários. |
Apresentada a sequência de operações realizadas logo depois de ligada, seu objetivo é conferir o resultado exibido. |
No primeiro caso de teste abaixo, o usuário deseja calcular o resultado da seguinte expressão: 1 × 2 × 1 × 3. Note que a primeira ocorrência do número 1 vem do fato da calculadora mostrar inicialmente 1 ao invés de 0. |
No segundo caso de teste abaixo, o usuário deseja calcular o resultado da seguinte expressão: ((1/2)/3) × 6. |
//### Entrada |
A primeira e única linha da entrada contém um inteiro N (1 ≤ N ≤ 100 000). Cada uma das próximas N linhas contém um dígito e um caractere '*' |
ou '/', que representam uma operação realizada na calculadora. |
//### Saída |
O programa deve imprimir uma única linha contendo o resultado que deve ser exibido pela calculadora ao final de todas as operações. |
|---------------------------------------| |
| Exemplo de Entrada | Exemplo de Saída | |
|--------------------|------------------| |
| 3 | 6 | |
| 2 * | | |
| 1 * | | |
| 3 * | | |
|--------------------|------------------| |
| 3 | 1 | |
| 2 / | | |
| 3 / | | |
| 6 * | | |
|--------------------|------------------| |
| 11 | 387420489 | |
| 9 * | | |
| 9 * | | |
| 9 * | | |
| 9 * | | |
| 9 * | | |
| 9 * | | |
| 9 * | | |
| 9 * | | |
| 9 * | | |
| 9 * | | |
| 9 / | | |
|---------------------------------------| |
*/ |
|
//Código do desafio: |
const inputs = [ //para uso local |
'3', |
'2 *', |
'1 *', |
'3 *', |
'3', |
'2 /', |
'3 /', |
'6 *', |
'11', |
'9 *', |
'9 *', |
'9 *', |
'9 *', |
'9 *', |
'9 *', |
'9 *', |
'9 *', |
'9 *', |
'9 *', |
'9 /', |
] //para uso local |
let i = 0 //para uso local |
|
let input, number1, number2, operator, result; |
const regexInput = /^([0-9]) *([*/])/ |
|
const doMath = { |
'/': (a, b) => { |
a = Number(a) |
b = Number(b) |
return parseFloat(a / b) |
}, |
'*': (a, b) => { |
if (Number(a) * Number(b) >= Number.MAX_SAFE_INTEGER) { |
a = BigInt(a) |
b = BigInt(b) |
return a * b |
} |
return a * b |
} |
} |
|
while (true) { |
number1 = 1 |
number2 = undefined |
result = undefined |
input = undefined |
operator = undefined |
// nOperators = parseInt(gets()) //para uso na DIO |
nOperators = parseInt(inputs[i++]) //para uso local |
|
if (!nOperators || nOperators === '' || nOperators < 1 || nOperators > 100000) break; |
|
for (let index = 0; index < nOperators; index++) { |
// input = gets(); //para uso na DIO |
input = inputs[i++]; //para uso local |
|
if (!input.match(regexInput)) continue; |
|
[str, number2, operator] = input.match(regexInput); |
|
if (number2 === undefined || (number2 == 0 && operator === '/')) continue; |
result = doMath[operator](number1, number2) |
|
number1 = result |
} |
|
if (result === undefined) { console.log(number1); continue; } |
console.log(typeof result == 'bigint' ? result.toString() : parseInt(result)) |
/* |
Nenhum comentário:
Postar um comentário