一千题,No.0132(如需挪车请致电)

phone.jpg

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

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;
}
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值