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多种语言分析,解答。

全部评论

相关推荐

2 7 评论
分享
牛客网
牛客企业服务