#问题如下
车主用一系列简单计算给出了自己的电话号码,即:
2/2=1、3+2=5、
9
=3、
9
=3、0%=0、叁=3、5−2=3、9/3=3、1×3=3、2
3
=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
#我的代码:
#include<string.h>
#include<map>
#include<string>
#include<iostream>
#include<math.h>
using namespace std;
const int maxn=2020;
int main(){
map<string, int> mp;
string str, ope;
string::iterator it;
mp["ling"]=0;
mp["yi"]=1;
mp["er"]=2;
mp["san"]=3;
mp["si"]=4;
mp["wu"]=5;
mp["liu"]=6;
mp["qi"]=7;
mp["ba"]=8;
mp["jiu"]=9;
mp["+"]=10;
mp["-"]=11;
mp["*"]=12;
mp["/"]=13;
mp["%"]=14;
mp["sqrt"]=15;
mp["^"]=16;
for(int i=0;i<11;i++){
str.clear();
cin>>str;
it=str.begin();
int sum1=0, sum2=0;
int len1=0, len2, len3;
for(;it!=str.end();it++){
if(*it>='0' && *it<='9'){
sum1=sum1*10+(*it-'0');
len1++;
}else{
break;
}
}
for(;it!=str.end();it++){
if(*it>='0' && *it<='9'){
break;
}else{
len2++;
}
}
for(;it!=str.end();it++){
if(*it>='0' && *it<='9'){
sum2=sum2*10+(*it-'0');
len3++;
}else{
break;
}
}
int openum=mp[str.substr(len1, len2)];
printf("%d %d %d\n",sum1, sum2, openum);
if(openum==0){
printf("0");
}else if(openum==1){
printf("1");
}else if(openum==2){
printf("2");
}else if(openum==3){
printf("3");
}else if(openum==4){
printf("4");
}else if(openum==5){
printf("5");
}else if(openum==6){
printf("6");
}else if(openum==7){
printf("7");
}else if(openum==8){
printf("8");
}else if(openum==9){
printf("9");
}else if(openum==10){
printf("%d",sum1+sum2);
}else if(openum==11){
printf("%d",sum1-sum2);
}else if(openum==12){
printf("%d",sum1*sum2);
}else if(openum==13){
printf("%d",sum1/sum2);
}else if(openum==14){
printf("%d",sum1%sum2);
}else if(openum==15){
printf("%d",sqrt(sum2));
}else if(openum==16){
int sum=1;
for(int i=0;i<sum2;i++){
sum*=sum1;
}
printf("%d",sum);
}
}
return 0;
}
我的问题是,为什么我的openum只在第一组循环里有效,其余情况都是0?