笔试题(1)牛客网

1.在英文中,有一些标点符号需要成对使用,达到闭合的效果。例如双引号("") 大括号({}) 方括号([])现在我们需要检测指定文本中的 双引号,大括号, 方括号是否闭合

package com.atguigu.java1;

import java.util.Scanner;
import java.util.Stack;

/**
 * 
 * 在英文中,有一些标点符号需要成对使用,达到闭合的效果。 例如双引号("") 大括号({}) 方括号([])现在我们需要检测指定文本中的 双引号,大括号,
 * 方括号是否闭合
 * 
 * 
 * Java中Scanner类中的方法next()和nextLine()都是吸取输入台输入的字符,区别:
 * 
 * next()不会吸取字符前/后的空格/Tab键,只吸取字符,开始吸取字符(字符前后不算)直到遇到空格/Tab键/回车截止吸取;
 * nextLine()吸取字符前后的空格/Tab键,回车键截止。
 * 
 * @author 39378
 *
 */

public class Kuo_hao_pi_pei {
	public static void main(String[] args) {
		//输入输出控制台调用
		Scanner sr = new Scanner(System.in);
		//①输入一个字符串
		String s = sr.nextLine();
		//该方法的作用是返回一个字符数组,该字符数组中存放了当前字符串中的所有字符
		//②将输入的字符串转换为字符数组
		char[] arr = s.toCharArray();
		//③将该数组传入到子方法solution中进行判断
		System.out.println(solution(s, arr));
		;
	}

	static boolean solution(String s, char arr[]) {
		// ④声明一个栈
		Stack<Character> stack = new Stack<Character>();
		// 开关 判断'"'符号匹配 (冒号比较特殊一点,)
		int flag = 0;
		for (int i = 0; i < s.length(); i++) {
		//⑤charAt() 方法用于返回指定索引处的字符。索引范围为从 0 到 length() - 1。
			char ch = s.charAt(i);
			if (ch == '[' || ch == '{') {
				//对栈进行操作(在已有数组的基础之上),进栈
				stack.add(ch);
			}
			if (ch == '"') {
				stack.add(ch);
				flag += 1;
			}
			// 检查[]
			else if (ch == ']') {	//{[3,4,[6,8]]}
				//出栈操作
				char ch1 = stack.pop();
				if (ch1 != '[')
					return false;
			}
			// 检查{}
			else if (ch == '}') {
				char ch2 = stack.pop();
				if (ch2 != '{')
					return false;
			}
			// 检查""
			//因为冒号用前面的flag进行判断即可,若字符串含有冒号,
			//即下面的代码中栈非空并且flag%2==0时,则表达式正确,
			//否则只要其中一个不满足
		}
		if (!stack.isEmpty() && flag % 2 != 0)
			return false;
		return true;
	}
}


2.一级目录输入任意一个正整数,计算出它的阶乘得数尾部有几个连续的0. 题目编写完毕需要计算出1000的阶乘得数尾部有几个连续的0,需要把这个统计数字打印输出例如:3!= 6, 程序输出0 5!=120, 程序输出1.

package com.atguigu.java1;

import java.math.BigInteger;
import java.util.Scanner;
/**
 * 
 	输入任意一个正整数,计算出它的阶乘得数尾部有几个连续的0.  
题目编写完毕需要计算出1000的阶乘得数尾部有几个连续的0,需要把这个统计数字打印输出

例如:
3!= 6, 程序输出0 
5!=120, 程序输出1.
 * @author 39378
 *
 */

public class N_de_jiecheng{
	public static void main(String[] args) {
		@SuppressWarnings("resource")
		//从控制台输入一个字符串
		String s = new Scanner(System.in).nextLine();
		//System.out.println(BigNumber(new BigInteger(s)).toString());
		//调用BigNumber方法 ,并且new一个BigInteger的匿名对象,将控制台中的
		String ch = BigNumber(new BigInteger(s)).toString();//取到控制台输入的字符
		int len = ch.length();//取字符的长度
		int count=0;//定义计数器
		for(int i=len-1;i>=0;i--){
			char a = ch.charAt(i);//取最后一位的字符
			if(a=='0') 
				count++;
			else
				break;
		}
		System.out.println(count);
	}
	//该方法为一个BigInteger类型的方法,该方法的作用就是进行阶乘
	public static BigInteger BigNumber(BigInteger n){
		if(n.intValue()==1) return new BigInteger("1");
    	//设置bt的值为1 以便后面每次减1 然后递归
		BigInteger bt = new BigInteger("1");
		//使n每次减1赋值给sb
		BigInteger sb = n.subtract(bt);
		//相当于返回n*n-1
    	return n.multiply(BigNumber(sb));    
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值