上图转自新浪微博。车主用一系列简单计算给出了自己的电话号码,即:
2/2=1、3+2=5、9=3、9=3、0%=0、叁=3、5−2=3、9/3=3、1×3=3、23=8、8/2=4,最后得到的电话号码就是 153 3033 3384。
本题就请你写个程序自动完成电话号码的转换,以帮助那些不会计算的人。
输入格式:
输入用 11 行依次给出 11 位数字的计算公式,每个公式占一行。这里仅考虑以下几种运算:加(+
)、减(-
)、乘(*
)、除(/
)、取余(%
,注意这不是上图中的百分比)、开平方根号(sqrt
)、指数(^
)和文字(即 0 到 9 的全小写汉语拼音,如 ling
表示 0)。运算符与运算数之间无空格,运算数保证是不超过 1000 的非负整数。题目保证每个计算至多只有 1 个运算符,结果都是 1 位整数。
输出格式:
在一行中给出电话号码,数字间不要空格。
输入样例:
2/2
3+2
sqrt9
sqrt9
6%2
san
5-2
9/3
1*3
2^3
8/2
输出样例:
15330333384
解题思路:
注意:还有一种是直接给你数字,不同做任何操作,就是直接给出一位数,没有操作符
就像输入:
1
1
9
输出:
119
#include <bits/stdc++.h>
using namespace std;
int main()
{
string res = "";
map<string,int> m = {{"ling",0},{"yi",1},{"er",2},{"san",3},{"si",4},{"wu",5},{"liu",6},{"qi",7},{"ba",8},{"jiu",9}};
for(int i = 0;i < 11;++i)
{
string line;
cin >> line;
if(line.size() == 1)
{
res += line;
}
else if(m.find(line) != m.end()) //拼音
{
res += to_string(m[line]);
}
else
{
//开平方根号
if(line.substr(0,4) == "sqrt")
{
res += to_string((int)sqrt(stoi(line.substr(4))));
}
else
{
//加,减,乘,除,取余,指数
int k = 0;//存储符号位置
while(isdigit(line[k])) ++k;
if(line[k] == '+')
{
res += to_string(stoi(line.substr(0,k)) + stoi(line.substr(k+1)));
}
else if(line[k] == '-')
{
res += to_string(stoi(line.substr(0,k)) - stoi(line.substr(k+1)));
}
else if(line[k] == '*')
{
res += to_string(stoi(line.substr(0,k)) * stoi(line.substr(k+1)));
}
else if(line[k] == '/')
{
res += to_string((int)stoi(line.substr(0,k)) / stoi(line.substr(k+1)));
}
else if(line[k] == '%')
{
res += to_string(stoi(line.substr(0,k)) % stoi(line.substr(k+1)));
}
else if(line[k] == '^')
{
res += to_string((int)pow(stoi(line.substr(0,k)),stoi(line.substr(k+1))));
}
}
}
}
cout << res;
}