蓝桥杯字符串题型总结

这篇博客探讨了多种数字处理方法,包括门牌制作中寻找数字2的出现次数,有奖猜谜游戏的策略,计算乘积尾零的个数,以及分数计算中的分子分母最大公约数。涉及到了int和字符串类型的转换,以及BigInteger的大数运算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.门牌制作
在这里插入图片描述
1.将数字当作int类型来处理

public static void main(String[] args) {
		// TODO Auto-generated method stub
		int ans = 0;
		for(int i=1;i<=2020;i++) {
			int t=i;
			while(t !=0) {
				if(t%10==2) {
					ans++;
				}
				t/=10;
			}
		}
		System.out.println(ans);
	}
2.将数字当作字符串来处理,Integer是int的引用类型,可以用i.toString()方法将int类型转换为str类型。
public static void main(String[] args) {
		int sum = 0;
		for(Integer i=1;i<=2020;i++) {
			String str = new String(i.toString());
			for(int j=0;j<str.length();j++) {
				if(str.charAt(j)=='2') {
					sum++;
				}
			}
		}
		System.out.println(sum);
	}

二.有奖猜谜
在这里插入图片描述
使用toCharArray()可以将字符串转换为字符数组

public static void main(String[] args) {
	int x = 777;
	String str = "vxvxvxvxvxvxvvx";
	char a[] = str.toCharArray();
	for(int i=0;i<a.length;i++) {
		if(a[i]=='v') {
			x=x*2;
		}else {
			x=x-555;
		}
		
	}
	System.out.println(x);
}

三.乘积尾零
在这里插入图片描述
1.将数字看成int类型

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		int []arr = new int[100];
		for(int i=0;i<100;i++) {
			arr[i] = sc.nextInt();
		}
		int cnt = 0;
		for(int i=1;i<100;i++) {
				arr[i]=arr[i]*arr[i-1];
				while(arr[i]%10==0) {
					cnt++;
					arr[i]/=10;
				}
				arr[i]=arr[i]%1000;	
		}
		System.out.println(cnt);
	}

2.将数字整体看成一个字符串,将大数输出出来,integer.valueof是将字符串类型转换为int类型

public static void main(String[] args) {
	Scanner sc = new Scanner(System.in);
	String str = sc.nextLine();
	String[] c = str.split(" ");
	BigInteger a = new BigInteger("1");
	for(int j=0;j<c.length;j++) {
	
		a.multiply(BigInteger.valueOf(Integer.valueOf(c[j])));
	}
	System.out.println(a);
}

3.使用int类型的大数

public static void main(String[] args)
	{
		Scanner in = new Scanner(System.in);
		BigInteger[] a = new BigInteger[100];   //大数BigInteger
		BigInteger s = BigInteger.valueOf(1);   //s求100个数相乘的乘积
		for(int i=0;i<100;++i)
		{
			a[i] = in.nextBigInteger();  //输入题目中的100个数
			if(i==0)
			{
				s = a[i];   //先把第一个数记录下来
			}
			else
			{
				s = s.multiply(a[i]);   //和剩下的99个数相乘       multiply是BigInteger中的乘法
			}
		}
		String str = s.toString();  //将乘积转换为字符串
		int cnt = 0;
		for(int i=str.length()-1;i>=0;--i)  //逆序遍历
		{
			if(str.charAt(i)=='0')  //统计末尾0的个数
			{
				cnt++;
			}
			else   //不是0退出
			{
				break;
			}
		}
		System.out.println(cnt);
	}

四.分数
在这里插入图片描述

public static void main(String[] args) {
		// TODO Auto-generated method stub
		BigInteger a = BigInteger.ONE;// 分子
		BigInteger b = new BigInteger((int) Math.pow(2, 19) + "");// 分母
		BigInteger sum = BigInteger.ZERO;// 分子和
		// 求分子
		for (int i = 1; i <= 20; ++i) {
			sum = sum.add(a);
			a = a.multiply(new BigInteger("2"));
		}

		// 分子分母最大公约数
		BigInteger gcd = sum.gcd(b);
		System.out.println(sum.divide(gcd) + "/" + b.divide(gcd));
	}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值