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多种语言分析,解答。
查看9道真题和解析