首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

今日头条实习笔试题 题3

题目: 读取一个表达式,并输出用字符‘6’拼出的计算结果。相邻数字用两个英文句号‘.’间隔。

输入描述:

第一行为一个整数n,接下来n行,每行为一个表达式

对于30%的数据,表达式仅包含‘6’,‘+’,'-'三种字符

对于100%的数据,表达式仅包含'6',‘+’,'-',‘*’四种字符。

1

计算结果 在【-2^63, 2^63-1】范围内

最终结果在【0,2^63-1】范围内

输出描述:

对于每组数据,输出用字符‘6’拼出的计算结果。

样例:

输入: 2

6+6

6*6

输出: 是用字符'6'拼起来的 1 2 3 6

字符中间用两个'.'连接

下面是牛客网上有人分享的题解+我的注释,勉强看懂了他的代码(心疼自己)

importjava.util.ArrayList;

importjava.util.List;

importjava.util.Scanner;

publicclassMain {

publicstaticvoidmain(String[]args) {

Scannersc=newScanner(System.in);

intn= Integer.parseInt(sc.nextLine());

ArrayListlist=newArrayList();

Strings;

for(inti= 0;i

//每获取一行数据,调用下面两个方法。

s=sc.nextLine();

Longres=getRes(s);//计算这一行的 表达式的结果

list.add(res);//将这一行的结果放到 list里。

}

// System.out.println(list.get(0));

printRes(list);//将计算结果 用 带'6'的字符打印出来

}

privatestaticLong getRes(Strings) {

//初始化当前值 和 结果

longcur= 0l;

longsum= 0l;

//符号标志,用的很巧妙。

longsymbol= 1;

for(inti= 0;i

//将字符串表达式分解成 字符

charc=s.charAt(i);

//如何把 一个字符串的表达式 ,解析成 long型, 这段 是精髓

//如果该字符是数字,那么就把这个字符 转换成 long型,这步可能不好理解,但是很重要。

if(isDigital(c)) {

cur=cur* 10 +c-'0';

}elseif(c=='+') {//遇到 操作符+, 将之前的数据保存起来, cur从0开始

sum+=symbol*cur;

cur= 0;

symbol= 1;

}elseif(c=='-') {//遇到 操作符-, 将之前的数据保存起来, cur从0开始,将符号置为-1,在最后一步的时候用

sum+=symbol*cur;

cur= 0;

symbol= -1;

}else{

symbol*=cur;//遇到 操作符*,保存之前的数据,将它变为了symbol,再最后一步用。

cur= 0;

}

}

//如果是乘,其实 只有cur 和symbol有用

//如果是加或减, symbol 只能是1或者-1

returnsum+cur*symbol;

}

//判断该字符是不是数字,如果是'+'或者'-'或者'*',那么就返回false,否则返回true

privatestaticbooleanisDigital(charc) {

if(c=='+'||c=='-'||c=='*')

returnfalse;

returntrue;

}

//list里的元素,是 每一行的计算结果

publicstaticvoidprintRes(Listlist) {

//定义一个二维数组,

String[][]charNum= {{"66666","....6","66666","66666","6...6","66666","66666","66666","66666","66666"},

{"6...6","....6","....6","....6","6...6","6....","6....","....6","6...6","6...6"},

{"6...6","....6","66666","66666","66666","66666","66666","....6","66666","66666"},

{"6...6","....6","6....","....6","....6","....6","6...6","....6","6...6","....6"},

{"66666","....6","66666","66666","....6","66666","66666","....6","66666","66666"}};

for(inti= 0;i

for(intj= 0;j

//遍历list里的元素,将之转化为String类型,

Stringnum=list.get(j) +"";

for(intk= 0;k

//将每个元素的 字符 转换为index数字

intindex=num.charAt(k) -'0';

if(j==list.size() - 1 &&k==num.length() - 1)

continue;

}

}

}

}

}

上面的charNum这样子 比较好看

这个人写的getRes方法 是真的精髓,值得膜拜。

当然,printRes方法 也值得 细细品味。

但是 ,我觉得 这个作者写的有点高端了,感觉getRes方法 可以用比较讨巧的方式写。 先记在这吧,有机会再看这道题。

测试用例(一)

测试用例(二)

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180325G1198U00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券