Дана строка, изображающая арифметическое выражение вида «<циф-
ра>±<цифра>±…±<цифра>», где на месте знака операции «±» находится
символ «+» или «–» (например, «4+7–2–8»). Вывести значение данного
выражения (целое число).
Другие языки программирования и технологии
Завтра уже сдавать!!! С++
Пусть выражение записано в строке s.
Заведем две переменные: sum для накопления результата и znak для запоминания знака последней операции (1 для +; −1 для −). Прибавляемое число (полученное из символа цифры путем вычитания символа '0') будем домножать на знак и результат прибавлять к нашей сумме.
'0' - '0' = 0
'1' - '0' = 1
'2' - '0' = 2
…
'9' - '0' = 9
Рассмотрим пример: 3−1
sum = 0; znak = 1
Встретили s[i] = '3'.
sum = sum + znak * (s[i] - '0') = 0 + 1 * 3 = 3
Встретили s[i] = '−'.
znak = −1
Встретили s[i] = '1'.
sum = sum + znak * (s[i] - '0') = 3 + (−1) * 1 = 3 − 1 = 2
Итог:
sum = 2
Код я не запускал, но примерно такой:
int sum = 0;
int znak = 1;
for (int i = 0; s[i] > 0; i++)
{
if (s[i] == '-')
znak = -1;
else if (s[i] == '+')
znak = 1;
else
sum = sum + znak * (s[i] - '0');
}
Заведем две переменные: sum для накопления результата и znak для запоминания знака последней операции (1 для +; −1 для −). Прибавляемое число (полученное из символа цифры путем вычитания символа '0') будем домножать на знак и результат прибавлять к нашей сумме.
'0' - '0' = 0
'1' - '0' = 1
'2' - '0' = 2
…
'9' - '0' = 9
Рассмотрим пример: 3−1
sum = 0; znak = 1
Встретили s[i] = '3'.
sum = sum + znak * (s[i] - '0') = 0 + 1 * 3 = 3
Встретили s[i] = '−'.
znak = −1
Встретили s[i] = '1'.
sum = sum + znak * (s[i] - '0') = 3 + (−1) * 1 = 3 − 1 = 2
Итог:
sum = 2
Код я не запускал, но примерно такой:
int sum = 0;
int znak = 1;
for (int i = 0; s[i] > 0; i++)
{
if (s[i] == '-')
znak = -1;
else if (s[i] == '+')
znak = 1;
else
sum = sum + znak * (s[i] - '0');
}
#include iostream
Я бы строку загнал в stringstream:
#include< sstream>
#include< ios>
#using namespace std
stringstream ss("1+2-3+4", ios_base::in);
Потом прочитал первое число
int n;
ss >> n;
Потом зациклил до конца строки
int t; char c;
ss >> c >> t;
if (c=='+') n+=t;
else if (c=='-') n-=t;
else break;
условие продолжения ss.good() - чтение проходит без ошибок.
результат будет в n
#include< sstream>
#include< ios>
#using namespace std
stringstream ss("1+2-3+4", ios_base::in);
Потом прочитал первое число
int n;
ss >> n;
Потом зациклил до конца строки
int t; char c;
ss >> c >> t;
if (c=='+') n+=t;
else if (c=='-') n-=t;
else break;
условие продолжения ss.good() - чтение проходит без ошибок.
результат будет в n
Так сдавай, я не против. Напиши и сдавай.
А не знаешь как, иди торговкой работай на рынок. Какое тебе программирование?
Зачем вы вообще учиться идете если ни в зуб ногой?
А не знаешь как, иди торговкой работай на рынок. Какое тебе программирование?
Зачем вы вообще учиться идете если ни в зуб ногой?
Похожие вопросы
- Помогите! Завтра надо сдавать все задачи, а у меня не хватает((( Паскаль
- Помогите! Завтра надо сдавать все задачи, а у меня не хватает еще пару задач))) Паскаль
- Помогите с очень простой задачей в Paskal. Срочно (завтра сдавать)
- Нужно ли сдавать физику, чтобы поступить на программиста?
- Delphi 2010 в delphi работает норм, срочно! ! курсач горит, через час сдавать (( а не работает
- Зачем от поступающих на программистов требуют сдавать профильную математику. Я посмотрела как пишутся программы на
- Почему на кибербезопасность, в некоторых институтах, надо сдавать физику а не информатику?
- сделала лабу по информатике,завтра защита,сделать -то сделала ,а объяснить не могу...картинка внутри
- Помогите написать программу на ассемблере, завтра экзамен а я в нём совсем не шарю.
- Кто нибудь сдавал экзамен по информатике в 9 классе?