贝克找房客户端第三道编程

package BeiKe;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.Stack;

/**

  • 题目描述:
  • 给你一个合法的算术表达式,只包含整数和加号,减号。但整数不一定都是十进制的数,可能是八进制,
  • 十六进制,规定包含前缀0x的是十六进制,包含前缀0的是八进制,其他情况是十进制。
  • 现在你能计算出这个式子最终的值吗?
  • <p>

  • 输入的表达式式子只会是 整数 +(-) 整数 +(-) 整数 …… +(-) 整数
  • <p>

  • 保证给定的整数不会超过6位(包括前缀0或者前缀0x)
  • <p>

  • 输入:输入有且只有一行,是一个字符串,保证是合法的表达式式子 如:027555+692-0xD32C
  • 输出:输出仅一行,表示最终的运算结果,要求以10进制的格式输出答案 如:-41227
    *
  • Created by XQM on 2018/10/15.
    */
    public class Main {
    public static void main(String[] args) {

    Scanner sc = new Scanner(System.in);
     String text = sc.nextLine();
     System.out.println(getResult(text));

    }
    private static String getResult(String text) {

    if (text.isEmpty()) {
         return "0";
     }
    
     Stack<Character> stack = new Stack<>();
     List<String> list = new ArrayList<>();
     for (int i = text.length() - 1; i >= 0; i--) {
         stack.push(text.charAt(i));
     }
    
     StringBuffer sb = new StringBuffer();
     while (!stack.isEmpty()) {
         char c = stack.peek();
         switch (c) {
             case '+':
                 stack.pop();
                 String tmp = sb.toString();
                 tmp = getTemNum(tmp);
                 if (!tmp.isEmpty()) {
                     list.add(tmp);
                 }
                 list.add("+");
                 sb.setLength(0);
                 break;
             case '-':
                 stack.pop();
                 String tmpNum = sb.toString();
                 tmpNum = getTemNum(tmpNum);
                 if (!tmpNum.isEmpty()) {
                     list.add(tmpNum);
                 }
                 list.add("-");
                 sb.setLength(0);
                 break;
             default:
                 c = stack.pop();
                 sb.append(c);
    
                 if (stack.isEmpty()) {
                     String endNum = sb.toString();
                     endNum = getTemNum(endNum);
                     if (!endNum.isEmpty()) {
                         list.add(endNum);
                     }
                 }
                 break;
         }
     }
    
     Integer integer = null;
     for (int i = 0; i < list.size(); i++) {
         if (list.get(i) == "+") {
             integer = Integer.valueOf(list.get(i - 1)) + Integer.valueOf(list.get(i + 1));
             if (i + 1 < list.size()) {
                 list.set(i + 1, integer + "");
             }
         } else if (list.get(i) == "-") {
             integer = Integer.valueOf(list.get(i - 1)) - Integer.valueOf(list.get(i + 1));
             if (i + 1 < list.size()) {
                 list.set(i + 1, integer + "");
             }
         }
     }
     return list.get(list.size() - 1);

    }

    public static String getTemNum(String tmp) {

    boolean isEight = true;
     String tmpNum = tmp;
    
     for (int j = 0; j < tmp.length(); j++) {
         if (tmp.charAt(j) == '0') {
             if (tmp.charAt(j + 1) == 'x') {
                 isEight = false;
             } else {
                 isEight = true;
             }
             break;
         } else {
             return tmpNum;
         }
     }
     if (isEight) {
         int valueEightToTen = Integer.parseInt(tmp.substring(1), 8);
         tmpNum = String.valueOf(valueEightToTen);
     } else {
         int valueSixToTen = Integer.parseInt(tmp.substring(2), 16);
         tmpNum = String.valueOf(valueSixToTen);
     }
     return tmpNum;

    }
    }

#贝壳找房##笔试题目##题解#
全部评论
我就呵呵了,什么鬼编译器,不认lambda表达式,浪费很多时间!!!
点赞 回复 分享
发布于 2018-10-16 11:09
import java.util.Scanner; public class Count {     public static void main(String[] args) {         Scanner scanner = new Scanner(System.in);         String s = scanner.nextLine().trim();         if (s.isEmpty()) {             print(0);         }         String[] nums = s.replace("-", " -")                 .replace("+", " ").split(" ");         Integer counts = 0;         for (int i = 0; i < nums.length; i++) {             String temp = nums[i];             int thisNum;             final boolean sub;             if (temp.contains("-")) {                 sub = true;                 temp = temp.replace("-", "");             } else                 sub = false;             if (temp.startsWith("0x")) {                 thisNum = Integer.parseInt(temp.replace("0x", ""), 16);             } else if (temp.startsWith("0")) {                 thisNum = Integer.parseInt(temp, 8);             } else {                 thisNum = Integer.parseInt(temp);             }             if (sub) {                 counts -= thisNum;             } else {                 counts += thisNum;             }         }         print(counts);     }     public static void print(Object o) {         System.out.println(o);     } } 我也来写一下
点赞 回复 分享
发布于 2018-10-15 23:54
这是c++的第二题
点赞 回复 分享
发布于 2018-10-15 21:23
/** * 题目描述: * 有多少长度为N的整数序列A1到AN,满足AN=M,1≤Ai≤M且Ai能整除Ai+1(1≤i<N)? * <p> * 输入两个空格隔开的整数N和M,1≤N,M≤1000。 * 输出满足给定条件的整数序列个数对109+7取模后的结果。 * <p> * 输入:3 3 * 输出:3 * 提示:满足给定条件的序列为{1 1 3}、{1 3 3}和{3 3 3}。 * <p> * AC 27% */ 各位大佬第一题怎么做???
点赞 回复 分享
发布于 2018-10-15 21:20

相关推荐

就只能3个月,但是要求长期全职实习
Swaying:你确实是能长期实习啊,但是你那时候有事也没啥办法嘛
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务