小明在工作中经常碰到各种进制数据的四则计算,他决定要写一个程序来支持多进制计算。这个计算器要支持+,-,*,/,(,),另外可以通过设置进制值来支持从2~16进制的加减乘除 不考虑超大数场景。
解答要求
时间限制:C/C++ 1000ms,其他语言:2000ms
内存限制:C/C++256MB,其他语言:512MB
输入
输入参数有两个:
1、待计算的字符串,包含数字,+,-,*,/,(,),待计算的字符串格式正确,不需要考虑非法字符、除零异常,数字符合下面参数的进制要求。涉及到a、b等字符统一小写;
2、进制值,取值范围从2到16

注意:
1、整数除法按截断除法处理(向0取整)
2、表达式均为合法表达式,相同优先级计算时按从左到右方式进行
3、 表达式长度大于1,小于1000
输出
输出计算结果,输出结果按对应进制输出,涉及到a、b等字符统一小写
样例1
输入:(1-2)*3+4
           10
输出:1

样例2

输入:-3/4

10

输出:0

解释:除法截断(向0靠拢),所以计算结果为0。"-"这里建议是当作减号来处理
样例3
输入:101+11
           2
输出:1000
解释:二进制计算,返回结果也是二进制

#include<iostream>
#include<stack>
#include<string>
#include<math.h>
using namespace std;int calculate(string s, int n) {if (s.length() == 0)return 0;char sign = '+';                                               // 初始化操作符int num = 0, res = 0, len = s.length();stack<int> stack;for (int i = 0; i <= len; i++)                                 // 这个边界值+1要特别小心否则最后一个数符不进栈{char c = s[i];if (c >= '0'&& c <= '9'){c = c - '0';num = num * n + c;}else if (c >= 'a' && c <= 'f'){c = c - 'a' + 10;num = num * n + c;}else if (c != ' ')   // 当前是操作符{if (c == '('){int j = i; int count = 0;  //count是括号计数器for (; i < len; i++) {if (s[i] == '(') { count++; }if (s[i] == ')') { count--; }if (count == 0) { break; }}num = calculate(s.substr(j + 1, i - 1), n);     // 递归处理子括号}switch (sign){int a;case '+':stack.push(num);break;case '-':stack.push(-1 * num);break;case '*':a = stack.top();stack.pop();stack.push(a * num);break;case '/':a = stack.top();stack.pop();stack.push(a / num);break;}num = 0;sign = c;                       // 暂存操作符}}while (!stack.empty()){res += stack.top();stack.pop();}return res;                             //返回值为10进制
}void convert(int res, int n)                // 十进制数转换n进制输出
{char s[100] = {'0'};                    // 临时存储char[]用于倒序输出char a;                                 // 工作字符int i = 0;                              // 工作指针if (res == 0)cout << 0  ;else if (res < 0)                       // 负数处理,abs(){res = abs(res);cout << '-' ;                       // 输出结果的负号}while (res != 0){a = res % n;                        // 取出最低位res /= n;                           // 高位继续if (a >= 0 && a <= 9)a = a + '0';else if (a >= 10 && a <= 15)a = a - 10 + 'a';i++;s[i] = a;}for (int j = i; j >= 1; j--)cout << s[j];
}int main()
{string s;cin >> s;int n;cin >> n;int res;res = calculate(s, n);                 //这是个十进制数结果,转出指定进制输出convert(res, n);return 0;
}

华子20221012笔试第三题相关推荐

  1. 2021 8.8拼多多笔试第三题解答

    第三题输出括号匹配  输入包含 "( ) L R D " 题目以后补充.... import java.util.Arrays; import java.util.Scanner; ...

  2. 2021.8.12携程笔试第三题:建树游戏DFS

    2021.8.12携程笔试 讨论区 在做最后一题的时候把题意看错了,悔之莫及,故记录此文引以为戒! 建树游戏 问题描述 有n个节点和n-1条边,形成一棵树,每个节点有一个权值.把其中一条边删除就形成了 ...

  3. 联通软研院2020年球季校招笔试第三题 20190916

    问题描述:小明有5个歌单,编号分别为A.B.C.D.E,每个歌单有3首不同的歌,现在他想要一个程序,当他输入一些歌单的名称的时候,每个歌单中输出一首歌到播放列表,并输出所有满足条件的播放列表. 输入: ...

  4. 2020年联通软件研究院校招笔试第三题

    题目描述: 解题思路: 直接从50元开始尝试,然后尝试10元,再然后5元,再然后一元. 然后处理小数部分. 解题代码: import java.util.Scanner;public class Ma ...

  5. 2020年快手校招JAVA岗笔试第三题

    题目描述: 将两个内容合并,每次,取第一行四个,取第二行5个.把多余的直接补在最后即可. 解题代码 import java.util.Scanner;public class Main_3 {publ ...

  6. 华为2019春招留学生笔试第三题python

    输入数字转化成对应的excel表值 1 -> a 2 -> b 3 -> c ... 26 -> z 27 -> aa 28 -> ab 思路:10进制转换为26进 ...

  7. 用友2020校招java笔试题_2020年快手校招JAVA岗笔试第三题-Go语言中文社区

    题目描述: 将两个内容合并,每次,取第一行四个,取第二行5个.把多余的直接补在最后即可. 解题代码 import java.util.Scanner; public class Main_3 { pu ...

  8. 华为20190410研发笔试第三题:求两点之间的路径数

    [题目描述]   在一张NXM的地图上,每个点的海拔高度不同,从当前点只能访问上下左右四个点中还没有到达过的点,且下一步的选择的点的海拔高度必须高于当前的点:求从地图中的点A到点B的总的路径数量除以1 ...

  9. 2023/3/11 美团春招笔试 第三题

    该题目的题干为: 对于该题目,使用差分数组 + 前缀和来解决 差分数组 + 前缀和 差分数组通常是用在需要对数组区间进行操作, 比如 整个区间 + n/-n的时候.如果我们使用for循环去做的话,那么 ...

最新文章

  1. 关于web项目的 ajax 处理方式
  2. [转载] 七龙珠第一部——第095话 悟空对抗克林
  3. php curl 批量,PHP实现的curl批量请求操作
  4. 计算机课讲什么学生爱学,学生党“最喜欢”的4门课程,尤其是最后1门,学渣:我们的最爱...
  5. GaussDB(for MySQL)如何快速创建索引?华为云数据库资深架构师为您揭秘
  6. 别奢望大数据会为你做这10件事儿!
  7. 《HTML 5与CSS 3 权威指南(第3版·上册)》——1.2 HTML 5深受欢迎的理由
  8. vscode写java快捷插件(Extension Pack for Java)
  9. html文本框显示当前时间,javascript  在文本框中显示系统当前日期(年-月-日 时:分:秒)...
  10. 等比数列求和公式的推导
  11. [ZZ] Maxwell 架构
  12. 记一次无意间的bypass云锁的SQL注入
  13. 反射(filed)的理解
  14. 常见电脑硬件故障有哪些?如何解决?~~~主板故障
  15. 配置海思开发板的网络(永久修改)
  16. Win11如何隐藏输入法悬浮窗?Win11隐藏输入法悬浮窗的方法
  17. Java项目:在线电子商城管理系统(java+SpringBoot+Thymeleaf+bootstrap+jQ+layui+maven+mysql)
  18. 2018-12-16【训练日记】
  19. 2048小游戏 java版(代码+注释)
  20. 关于安装了非正版Office软件(原电脑有正版)后不能使用原正版office解决方法!!!

热门文章

  1. 想自己搭建服务器,永久运行网站?一个 U 盘大小的树莓派就够了!
  2. win7 台式机建热点
  3. 电子小制作:手机控制的收音机
  4. MFC: DeviceIoControl 通过API访问设备驱动程序
  5. 第一性原理·非线性成长·人生模式
  6. [Summary]召集会议
  7. Python数据处理之一:数据读取
  8. Docker(七)--Docker数据卷管理及插件
  9. C++编程笔记:使用WinHTTP实现HTTP访问(解决接收UTF8数据乱码问题)
  10. ARM base instruction -- cmn