1118 如需挪车请致电

上图转自新浪微博。车主用一系列简单计算给出了自己的电话号码,即:

2/2=12/2=1 、 3+2=53+2=5 、 9=39​=3 、 9=39​=3 、 0%=00%=0 、叁 =3=3 、 5−2=35−2=3 、 9/3=39/3=3 、 1×3=31×3=3 、 23=823=8 、 8/2=48/2=4 ,最后得到的电话号码就是 153 3033 3384。

本题就请你写个程序自动完成电话号码的转换,以帮助那些不会计算的人。

输入

输入用 11 行依次给出 11 位数字的计算公式,每个公式占一行。这里仅考虑以下几种运算:加(+)、减(-)、乘(*)、除(/)、取余(%,注意这不是上图中的百分比)、开平方根号(sqrt)、指数(^)和文字(即 0 到 9 的全小写汉语拼音,如ling表示 0)。运算符与运算数之间无空格,运算数保证是不超过 1000 的非负整数。题目保证每个计算至多只有 1 个运算符,结果都是 1 位整数。

输出

在一行中给出电话号码,数字间不要空格。

输入样例 1 

2/2
3+2
sqrt9
sqrt9
6%2
san
5-2
9/3
1*3
2^3
8/2

输出样例 1

15330333384
#include<bits/stdc++.h>
using namespace std;

int main(){
	string exper;
	map<string,int> mp={
	{"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 per;
		int id=0;
		int sum=0;
		cin>>per;/*有空格则输入getline*/
		
		if((id=per.find("+"))!=-1){
			sum=stoi(per.substr(0,id))+stoi(per.substr(id+1));
		}
		else if((id=per.find("-"))!=-1){
			sum=stoi(per.substr(0,id))-stoi(per.substr(id+1));
		}
		else if((id=per.find("*"))!=-1){
			sum=stoi(per.substr(0,id))*stoi(per.substr(id+1));
		}
		else if((id=per.find("/"))!=-1){
			sum=stoi(per.substr(0,id))/stoi(per.substr(id+1));
		}
		else if((id=per.find("%"))!=-1){
			sum=stoi(per.substr(0,id))%stoi(per.substr(id+1));
		}
		else if((id=per.find("%"))!=-1){
			sum=stoi(per.substr(0,id))%stoi(per.substr(id+1));
		}
		else if((id=per.find("^"))!=-1){
			sum=(int)pow(stoi(per.substr(0,id)),stoi(per.substr(id+1)));
		}
		else if(per.substr(0,4)=="sqrt"){
			sum=(int)sqrt(stoi(per.substr(4)));/*注意被开根数不只是个位数,应截取至末尾*/
		}
		else if(mp.count(per)){
			sum=mp[per];
		}
		else sum=stoi(per);/*至多1个运算符代表可以没有运算符*/
		exper+=to_string(sum);
	}
	cout<<exper<<endl;
	return 0;
}

map::count()是C++ STL中的内置函数,如果在映射容器中存在带有键K的元素,则该函数返回1。如果容器中不存在键为K的元素,则返回0。

string中的count()函数——统计string字符串出现字符个数

string的大小写转换:tolower()和toupper()函数

string的分割/截取字符串:strtok() & substr(),string s2 = s1.substr(2,5); // 结果:23456-----参数5表示:截取的字符串的长度;

 find()方法可以快速定位指定字符(串)的位置,未找到则返回-1
        // 2. substr()的两种使用方法:
        // substr(n): 截取从n位置到末尾的字符串
       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值