华为上机测试题(表达式运算-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题:输入字 ...
随机推荐
- Git的使用--将本地项目上传到Github
Git的使用--将本地项目上传到Github 感谢作者 --> 原文链接 很早之前就注册了Github,但对其使用一直懵懵懂懂,很不熟练.直到昨天做完百度前端技术学院的task,想把代码托管到G ...
- 財務会計関連(FI&CO)
[財務会計伝票]FB01: 登録FB02: 伝票変更FB09: 明細変更FB03: 照会FB04: 変更履歴照会FB08: 反対仕訳FB05: 消込転記FB50: G/L勘定伝票一般転記FB1S: 勘 ...
- 邮件系统之Postfix与Dovecot
电子邮件系统 电子邮件系统基于邮件协议来完成电子邮件的传输,常见的邮件协议有: 简单邮件传输协议(Simple Mail Transfer Protocol,SMTP):用于发送和中转发出的电子邮件, ...
- Pascal小游戏 随机函数
一个被人写滥了的小程序,新手学习,Pascal By Chaobs 初学者可以用它来学习随机函数的运用,当然你完全可以自己写一个随机函数. var player1,player2:longint; ...
- python负数除法与模运算
1.负数除法: >>> print 45/76>>> print -45/7-7 >>> print 45/-7-7 >>> p ...
- Python学习-day18 Web框架
众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 ...
- protobuf-net与FlatBuffers
protobuf-net Protobuf是google开源的一个项目,用户数据序列化反序列化,google声称google的数据通信都是用该序列化方法.它比xml格式要少的多,甚至比二进制数据格式也 ...
- 孤荷凌寒自学python第四十六天开始建构自己用起来更顺手一点的Python模块与类尝试第一天
孤荷凌寒自学python第四十六天开始建构自己用起来更顺手一点的Python模块与类,尝试第一天 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 按上一天的规划,这是根据过去我自学其它编程语 ...
- AppCan试用体验
最近自己想开发一个基于Android平台的小应用,但不想使用JAVA开发,还要快速实现功能,学习成本低. 所以找了很多框架,最后基本锁定在phoneGap和AppCan,又看了AppCan与phone ...
- Oz 创建Debian8镜像
<template> <name>Debian8.7-zxy</name> <os> <name>Debian</name> & ...