計算器
問題描寫敘述: 輸入乙個簡單四則運算表示式字串,計算該表示式的值
注: 1、表示式僅僅含 +, -, *, /, (, ), 四則運算符
2、表示式數值僅僅包括整數(0-9),每乙個運算元能夠是多位。且不會出現0作為除數的情況
3、要考慮加減乘除按通常四則運算規定的計算優先順序
4、除法用整數除法,即僅保留除法運算結果的整數部分。比方80/3=26。
輸入表示式保證無0作為除數情況發生
5、輸入字串一定是符合題意合法的表示式,當中僅僅包含數字字元和四則運算符字元。除此之外不含其他不論什麼字元,不會出現計算溢位情況
要求實現函式:
int calculate(int len,char *expstr)
【輸入】 int len: 字串長度; char *expstr: 表示式字串。
【輸出】 無
【返回】 計算結果
• 演示樣例
1) 輸入:char *expstr = 「-3*(-200)-(-3*(-5-2*10)/(4+3-17)*9)」
函式返回:663
2) 輸入:char *expstr = 「8/3*3」
函式返回:6
#include "stdafx.h"
#include#include#includeusing namespace std;
char*vec2char(vectorvec, char*str)
//計算不帶括號的表示式的值
int calculate_without_bracket(vector&substr)
} if (*it == '*' || *it == '/')
if (it1 != substr.begin())
else
else if (*(it1 - 1) == '+')//這一次的乘除運算之前不可能出現別的「*」或「/」
else
it1++;}}
else if (it1 == substr.begin() && *it1 == '-')
it1++;
it2 = it + 1;
if (*it2 == '-')
p = bb.begin();
while (p != bb.end())
while (it2 != substr.end() && *it2 - '0' >= 0 && *it2 - '0' <= 9)
if (*it == '*')
aa = f1*f2;
else
aa = f1 / f2;
if (flag1)
aa = -aa;
char*ss = new char[100];
_itoa(aa, ss, 10);
if (it1 == substr.begin())
it = substr.begin();
}else
+ 1, aa+'0');
it = iter + 1;
}} else
//if (substr.size() == 1)
// return (*substr.begin() - '0');
} it = substr.begin();
while (it != substr.end())
else
}p = bb.begin();
while (p != bb.end())
it = it1;
it2 = it + 1;
if (*it2 == '-')//由於每次去括號時,都會對多個「-」
//號進行合併,這裡不會出現多於兩個「-」相連的情況
while (it2 != substr.end() && *it2 - '0' >= 0 && *it2 - '0' <= 9)
if (*it == '+')
if (flag2)
aa = -f1 - f2;
else
aa = -f1 + f2;
else
if (flag2)
aa = -f1 + f2;
else
aa = -f1 - f2;
char*ss = new char[100];
_itoa(aa, ss, 10);
int c = 0;
substr.erase(substr.begin(), it2);
while (*ss != '\0')
aa + '0');
it = substr.begin();
}} else if
//由於每次都是從左到右一次僅僅計算兩個數,除了第乙個符號是「-」外。還有一種
//情況下第乙個運算元一定是正數。僅僅需考慮第二個運算元的符號
(*it == '+' || *it == '-')
while (*it1 - '0' >= 0 && *it1 - '0' <= 9 && it1 - substr.begin() >= 0)
if (it1 != substr.begin())
it1++;
p = bb.begin();
while (p != bb.end())
while (it2 != substr.end() && *it2 - '0' >= 0 && *it2 - '0' <= 9)
if (*it == '+')
if (flag1)
aa = f1 - f2;
else
aa = f1 + f2;
else
if (flag1)
aa = f1 + f2;
else
aa = f1 - f2;
char*ss = new char[100];
_itoa(aa, ss, 10);
if (it1 == substr.begin())
aa + '0');
it = substr.begin();
}else
it = iter + 1;
}} else
}return atoi(vec2char(substr, str));
}//去括號,每次找到第一對連續匹配的括號。然後用calculate_without_bracket函式
//計算括號中的表示式的值。計算後的結果插入原表示式,返回true。
//假設原表示式沒有括號,返回false
bool erase_bracket(vector&str)
else if (str[k] == '(')
} else
}if (flag) }
return flag;
}/*vectorchar2vec(vector&vec, char*str)
return vec;
}*///總體表示式計算函式,每次呼叫erase_bracket函式先計算括號中的值
//直到消除全部的括號。最後呼叫calculate_without_bracket計算剩下的無括號表示式的值
int calculate(int len, char *expstr)
return calculate_without_bracket(str);
}int _tmain(int argc, _tchar* ar**)
簡單計算器的實現
計算器 問題描述 輸入乙個簡單四則運算表示式字串,計算該表示式的值 注 1 表示式只含 四則運算符 2 表示式數值只包含整數 0 9 每個運算元可以是多位,且不會出現0作為除數的情況 3 要考慮加減乘除按通常四則運算規定的計算優先順序 4 除法用整數除法,即僅保留除法運算結果的整數部分。比如80 3...
簡單計算器的實現
題目描述 讀入乙個只包含 的非負整數計算表示式,計算該表示式的值。輸入 測試輸入包含若干測試用例,每個測試用例佔一行,每行不超過200個字元,整數和運算子之間用乙個空格分隔。沒有非法表示式。當一行中只有0時輸入結束,相應的結果不要輸出。輸出 對每個測試用例輸出1行,即該表示式的值,精確到小數點後2位...
C 實現簡單計算器
要求 輸入乙個包含 的非負整數計算表示式,計算表示式的值,每個字元之間需有乙個空格,若一行輸入為0,則退出程式。輸入樣例 4 2 5 7 11 輸出樣例 13.36 實現 include include using namespace std char str 200 儲存表示式字串 int mat...