2023 荣耀笔试题 0905
笔试时间:2023年9月5日 秋招
第一题
题目:算式求解
要开发一款教育类App,帮助幼儿在识数阶段做一百以内自然数[0.99]的加减法。屏慕上会显示“1”“2”“3”“4””“5”“6”“7”“8”“9”“0”“+”“-”“=”这些按钮,用户在按了若工按钮之后,如果按了“=”,则会把按“=”之前的字符串作为一个算式,计算结果,中间结果或最后结果可以为负数。
输入描述
输入为一个字符串,形如“23+86-6+37+24-8-13”。输入字符串中保证:
1.不会包含除“1”“2”“3”“4”“5”“6”“7"8”“9"“0”“+"“="之外的字符
2.长度不为0
3.不以“+”或“-”开始,不以“+"或“-”结束
4.不会出现连续两个或两个以上"+"
5.不会出现连续两个或两个以上"-"
6."+""-"不会相邻
7.操作数为范围为[0,99]
8.一定包含运算符 (“+”或“-”)
输出描述
算式结果,一个整数。
样例输入
1+2+99-10-10
样例输出
82
参考题解
参考逆波兰表达式的做法
C++:
#include <iostream> #include <string> using namespace std; using ll = long long; int main() { string expression; cin >> expression; int length = expression.size(); ll result = 0; for (int i = 0; i < length; ++i) { int sign = 1; if (expression[i] == '-') { sign = -1; ++i; } else if (expression[i] == '+') { ++i; } int j = i; while (j < length && isdigit(expression[j])) { ++j; } int number = stoi(expression.substr(i, j - i)); result = result + sign * number; if (j == length) { break; } i = j - 1; } cout << result; return 0; }
Java:[此代码未进行大量数据的测试,仅供参考]
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String s = scanner.next(); int n = s.length(); long ans = 0; for (int i = 0; i < n; ++i) { int symbol = 1; if (s.charAt(i) == '-') { symbol = -1; ++i; } else if (s.charAt(i) == '+') { ++i; } int j = i; while (j < n && Character.isDigit(s.charAt(j))) { ++j; } int m = Integer.parseInt(s.substring(i, j)); ans = ans + symbol * m; if (j == n) { break; } i = j - 1; } System.out.println(ans); } }
Python:[此代码未进行大量数据的测试,仅供参考]
s = input() n = len(s) ans = 0 i = 0 while i < n: symbol = 1 if s[i] == '-': symbol = -1 i += 1 elif s[i] == '+': i += 1 j = i while j < n and s[j].isdigit(): j += 1 m = int(s[i:j]) ans = ans + symbol * m if j == n:
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
2023 秋招笔试题汇总解析 文章被收录于专栏
2023秋招各大笔试题汇总,c++,java,python多种语言分析,解答。