华为上机测试题(表达式运算-java)
PS:自己写的,自测试OK,供大家参考。
补充:数据解析的过程,评论区有更好的处理方式,可参考。
/*
* 输入一个表达式,3*8+7-2,没有括号 输出结果
*/
/* 本程序暂不考虑容错处理 */
import java.util.Scanner; public class Calculator { /* 例如:表达式 3*8+7-2中,dataNum=4,opNum=3 */
private static int daNum = 0; //表达式中数据个数
private static int opNum = 0; //表达式中运算符个数 public static void main(String[] args) { System.out.println("请输入运算表达式(例如:3*8+7-2):");
Scanner s = new Scanner(System.in);
//String str = s.nextLine().toString();
char[] ch = s.nextLine().toCharArray();
s.close();
StringBuffer sbOP = new StringBuffer();
StringBuffer sbDA = new StringBuffer(); int dataIndex = 0;
int[] data = new int[32]; // 限定能处理的最大数据个数为32 for(int i = 0; i < ch.length; i++)
{
if(('+' == ch[i])||('-' == ch[i])||('*' == ch[i])||('/' == ch[i]))
{
sbOP.append(ch[i]);
opNum++;
for(int j = dataIndex; j < i; j++)
{
sbDA.append(ch[j]);
}
data[daNum++] = Integer.parseInt(sbDA.toString());
sbDA.delete(0, sbDA.length()); //清空sbDA
dataIndex = i+1;
}
}
for(int j = dataIndex; j < ch.length; j++)
{
sbDA.append(ch[j]);
}
data[daNum++] = Integer.parseInt(sbDA.toString());
int[] da = new int[daNum]; //数值数组
for(int i = 0; i < daNum; i++)
{
da[i] = data[i];
//System.out.println("da:"+da[i]);
}
char[] op = sbOP.toString().toCharArray(); //运算符数组 System.out.println("="+cal(da, op));
} private static int cal(int[] da, char[] op) { if(1 == daNum)
{
return da[0];
} // 初始化 标示所以da值都是有效的
boolean[] flag = new boolean[daNum];
for(int i = 0; i < daNum; i++)
{
flag[i] = true;
} while(1 != daNum)
{
// 乘除运算
for(int i = 0; i < opNum; i++)
{
if('*' == op[i])
{
da[i+1] = da[i] * da[i+1];
flag[i] = false;
daNum--;
}
if('/' == op[i])
{
da[i+1] = da[i] / da[i+1];
flag[i] = false;
daNum--;
}
} // 加减运算
int index = 0;
for(int i = 0; i < opNum; i++)
{
index = i+1;
if('+' == op[i])
{
while(!flag[index])
{
index++;
}
da[index] = da[i] + da[index];
flag[i] = false;
daNum--;
}
if('-' == op[i])
{
while(!flag[index])
{
index++;
}
da[index] = da[i] - da[index];
flag[i] = false;
daNum--;
}
}
} return da[opNum];
}
}
华为上机测试题(表达式运算-java)的更多相关文章
- 华为上机测试题(数字字符串转二进制-java)
PS:此题满分,可参考 /* * 题目:数字字符串转二进制 * 描述: 输入一串整数,将每个整数转换为二进制数,如果倒数第三个Bit是“0”,则输出“0”,如果是“1”,则输出“1”. 题目类别: ...
- 华为上机测试题(水仙花数升级版-java)
PS:这题满分100,没有做对,大家帮忙看看问题在哪 /* * 题目:水仙花数升级版 * 描述: 水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身.(例如:1 ...
- 华为上机测试题(Excel表格纵列字母数字转换-java)
PS:这是我刚做的一道题,题目不难,满分60,得分40,大家看看哪里有问题,欢迎提意见,感谢! /* * 题目:Excel表格纵列字母数字转换 * 描述: 在Excel中列的编号为A-Z,AA-AZ, ...
- 华为上机测试题(MP3光标移动-java)
PS:此题满分,可参考 描述: MP3 Player因为屏幕较小,显示歌曲列表的时候每屏只能显示几首歌曲,用户要通过上下键才能浏览所有的歌曲.为了简化处理,假设每屏只能显示4首歌曲,光标初始的位置为第 ...
- 华为上机测试题(大数相乘-java)
PS:这个不是自己写的,测试OK,供参考. /** * 大数相乘 */ public class BigData { public static void main(String[] args) { ...
- 华为上机测试题(及格分数线-java)
PS:自己写的,自测试OK,供大家参考. /* 描述:10个学生考完期末考试评卷完成后,A老师需要划出及格线,要求如下:(1) 及格线是10的倍数:(2) 保证至少有60%的学生及格:(3) 如果所有 ...
- 华为上机测试题(求亮灯数量-java)
PS:自己写的,自测试OK,供大家参考. /* 一条长廊里依次装有n(1 ≤ n ≤ 65535)盏电灯,从头到尾编号1.2.3.…n-1.n.每盏电灯由一个拉线开关控制.开始,电灯全部关着.有n个学 ...
- 华为上机测试题(地铁换乘-java)
PS:自己写的,自测试OK,供大家参考. /* 高级题样题:地铁换乘描述:已知2条地铁线路,其中A为环线,B为东西向线路,线路都是双向的.经过的站点名分别如下,两条线交叉的换乘点用T1.T2表示.编写 ...
- 华为上机题汇总----java
以下华为上机题目都是网上整理得到的,代码都是自己调试过的,由于网上java答案较少,欢迎大家批评指正,也希望对准备华为上机的童鞋们有一点点帮助.在练习的过程中成长,加油!~~ 第1题:输入字 ...
随机推荐
- POJ:2431-Expedition
Expedition Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 20089 Accepted: 5786 Descripti ...
- Ubuntu 16.04上安装并配置Postfix作为只发送SMTP服务器
如果大家已经在使用第三方邮件服务方案发送并收取邮件,则无需运行自己的邮件服务器.然而,如果大家管理一套云服务器,且其中安装的应用需要发送邮件通知,那么运行一套本地只发送SMTP服务器则更为理想. 如何 ...
- hive-pom.xml
4.0.0 <groupId>com.cenzhongman</groupId> <artifactId>hive</artifactId> <v ...
- 集合源码分析之 HashMap
一 知识准备 HashMap是基于哈希表的Map接口的非同步实现.此实现提供所有可选的映射操作,并允许使用null值和null键.此类不保证映射的顺序,特别是它不保证该顺序恒久不变. 二 HashM ...
- Myeclipse代码格式化的样式和保存自动格式化
第一种方法:下载格式化代码样式文件,参考这位老兄的方法(包含了保存自动格式化):http://blog.csdn.net/u010028869/article/details/49780515 下 ...
- 4 CSS的20/80个知识点
1.css的基本构成 样式选择器 id选择器 元素选择器 2.css的盒模型 border padding margin 3.Atom快捷键 4.程序 (1)初始程序 <!DOCTYPE htm ...
- wireshark 获取RTP payload
wireshark 抓包获取RTP TS流数据,保存为TS文件 首先解析RTP流 2.点击菜单栏[Statistics]-[RTP]-[Show All Streams] 3.在Wireshark:R ...
- 七夕蠕虫“XX神器”逆向分析
转载请注明出处 ____________________________________________________________________________________________ ...
- protobuf-net与FlatBuffers
protobuf-net Protobuf是google开源的一个项目,用户数据序列化反序列化,google声称google的数据通信都是用该序列化方法.它比xml格式要少的多,甚至比二进制数据格式也 ...
- 使用cloudbase-init初始化windows虚拟机
CloudBase-init简介 cloudbase-init 是 Windows 和其他系统的云初始化程序,可以设置主机名.创建用户.设置静态ip.设置密码等.对应的linux初始化程序是cloud ...