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

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

相关推荐

缓解焦虑的最好方法是回家。鼠鼠昨天上午考完了本科阶段的最后一场考试,大概率考得稀烂,但是没多想,考完立马收拾行李,坐上了提前约好的顺风车飞奔回家。虽然家和学校很近,只有一百多公里的路程,但距离上次回家也已经有三四个月了。每次想回家,期间总有考试、毕业设计、面试、实习等等各种各样的原因,没办法回去,待在学校和公司的每一天也都充斥着无形的压力和焦虑。现在终于完成了答辩,考完了试,公司那边也请了假,是时候回去一趟了。没有提前通知爸妈,想给他们一个惊喜。下午提前到了家,他俩还在上班,只好让外公外婆来给我开门。因为我的回家,晚上外婆在厨房格外忙碌,做了满满一大桌子菜,填饱了我天天吃外卖的肚子。晚上也没空...
梦想是成为七海千秋:取决于家庭吧?其实回家更焦虑了,每天起床父母都问实习找好了没简历投递了没今天有没有面试,但是又没有什么结果,玩两下手机父母就会说你看你啥也没找到为什么天天就知道刷手机,怎么不去学习…我现在就希望我能永远在外面实习,报喜不报忧,等拿到一个好offer再回家
点赞 评论 收藏
分享
06-08 22:25
门头沟学院 Java
从零开始的转码生活:这hr不会打开手机不分青红皂白给所有人群发这句话,过一会再给所有人再发一遍,这肯定会有重复的,不管,再过一会再发一遍
点赞 评论 收藏
分享
醉蟀:你不干有的是人干
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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