Algorithm
Problem Name: beecrowd | 3065
Problem Link: https://www.beecrowd.com.br/judge/en/problems/view/3065
Calculando
Por Brazil
Timelimit: 1
A disseminação dos computadores se deve principalmente à capacidade de eles se comportarem como outras máquinas, vindo a substituir muitas destas. Esta flexibilidade é possível porque podemos alterar a funcionalidade de um computador, de modo que ele opere da forma que desejarmos: essa é a base do que chamamos programação.
Sua tarefa é escrever um programa que faça com que o computador opere como uma calculadora simples. O seu programa deve ler expressões aritméticas e produzir como saída o valor dessas expressões, como uma calculadora faria. O programa deve implementar apenas um subconjunto reduzido das operações disponíveis em uma calculadora: somas e subtrações.
Entrada
A entrada é composta de vários conjuntos de testes. A primeira linha de um conjunto de testes contém um número inteiro m (1 ≤ m ≤ 100), indicando o número de operandos da expressão a ser avaliada. A segunda linha de um conjunto de testes contém a expressão aritmética a ser avaliada, no seguinte formato:
X1 s1 X2 s2 ... Xm-1 sm-1 Xm
onde
• Xi, 1 ≤ i ≤ m, é um operando (0 ≤ Xi ≤ 100);
• sj, 1 ≤ j < m, é um operador, representado pelos símbolos ‘+’ ou ‘–’;
• não há espaços em branco entre operandos e operadores. O final da entrada é indicado pelo valor m = 0.
Saída
Para cada conjunto de testes da entrada seu programa deve produzir três linhas. A primeira linha deve conter um identificador da expressão, no formato “Teste n”, onde n é numerado a partir de 1. Na segunda linha deve aparecer o resultado encontrado pelo seu programa. A terceira linha deve ser deixada em branco. A grafia mostrada no Exemplo de Saída, abaixo, deve ser seguida rigorosamente
Exemplo de Entrada | Exemplo de Saída |
3 3+7-22 3 5-10-77 10 1+2+3+4+5+6+7+8+9+10 0 |
Teste 1 -12 Teste 2 -82 Teste 3 55 |
Code Examples
#1 Code Example with C Programming
Code -
C Programming
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAXSIZ 11234
int main(int argc, char **argv)
{
int n, x, ans, i, j;
bool signal[MAXSIZ];
x = 0;
while (scanf("%d", &n), n)
{
char *tmp;
char string[MAXSIZ];
int nums[MAXSIZ];
scanf("%s", string);
if (n == 1)
printf("Teste %d\n%s\n\n", ++x, string);
else
{
i = j = 0;
while (string[i])
{
if (string[i] == '+')
signal[j++] = true;
else if (string[i] == '-')
signal[j++] = false;
++i;
}
i = 0;
tmp = strtok(string, "+-");
nums[i++] = atoi(tmp);
do
{
tmp = strtok(NULL, "+-");
if (tmp)
nums[i++] = atoi(tmp);
} while (tmp);
ans = nums[0];
for (i = 0; i < n - 1; ++i)
if (signal[i])
ans += nums[i + 1];
else
ans -= nums[i + 1];
printf("Teste %d\n%d\n\n", ++x, ans);
}
}
return 0;
}
Copy The Code &
Try With Live Editor
#2 Code Example with Javascript Programming
Code -
Javascript Programming
const { readFileSync } = require("fs")
const input = readFileSync("/dev/stdin", "utf8").split("\n")
function main() {
for (let i = 0; i < input.length; i += 2) {
if (input[i] == "0") break
console.log("Teste %d", (i / 2) + 1)
console.log(eval(input[i + 1]))
console.log("")
}
}
main()
Copy The Code &
Try With Live Editor