package SuanFa;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Demo1 {
public static void main(String []args){
int []arr={1,3,5,7,9,11,12,13,15,16,18,19,20};
int a=rank(100,arr);
System.out.println(a);
System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(new Date()));
}
static int rank(int key,int []arr){
int start=0;
int end=arr.length-1;
while (start<=end){
int mid=start+((end-start)/2);
if(key<arr[mid])end=mid-1;
else if(key>arr[mid])start=mid+1;
else return mid;
}
return -1;
}
}
试用与有序集合
优化版,支持括号内多个运算符
package SuanFa; import java.util.Stack; public class StackCalculateExpression { public static void calculate(char[] cArr){ //定义一个运算符栈 Stack<String> ops =new Stack<String>(); //定义一个操作数栈 Stack<Integer> vals=new Stack<Integer>(); //遍历出所有的操作数和运算符 for(char c:cArr){ String str=String.valueOf(c); if(str.equals("(")) ops.push("("); else if(str.equals("+")) ops.push(str); else if(str.equals("-")) ops.push(str); else if(str.equals("*")) ops.push(str); else if(str.equals("/")) ops.push(str); else if(str.equals(")")){ String op=""; while ((op=ops.pop())!="(") { Integer v = vals.pop(); if (op.equals("+")) v = vals.pop() + v; else if (op.equals("-")) v = vals.pop() - v; else if (op.equals("*")) v = vals.pop() * v; else if (op.equals("/")) v = vals.pop() / v; vals.push(v); } }else vals.push(Integer.parseInt(str)); } System.out.println(vals.pop()); } public static void main(String[] args) { String str="(1+((1+3+1+3+2)*(2*3)))"; calculate(str.toCharArray()); } }