【Java】蓝桥杯PREV-55 小计算器

这篇博客介绍了如何使用Java解决蓝桥杯PREV-55题,涉及StringTokenizer处理多值输入,将'NUM'转为十进制计算,用BigInteger处理大数运算,并通过变量记录运算方式。虽然存在不足,但展示了问题的解决思路。

一、题目描述

二、代码 

import java.math.BigInteger;
import java.util.Scanner;
import java.util.StringTokenizer;

public class Main {
	public static void main(String[] args) {
		@SuppressWarnings("resource")
		Scanner in = new Scanner(System.in);
		int  n = in.nextInt();

		
		String command;
		BigInteger res = null;
		boolean isStart = false;
		int ope = 0;
		int PN = 10;
		in.nextLine();		
		for(int i = 0; i < n; i++){
			StringTokenizer stringTokenizer = new StringTokenizer(in.nextLine());
			command = stringTokenizer.nextToken();
				if(command.equals("CHANGE")){
					String str = stringTokenizer.nextToken();
					PN = Integer.parseInt(str);
				}
				else if(command.equals("EQUAL")){
					String string  = res.toString(PN).toUpperCase();
					System.out.pri
### Java 实现斐波那契数列的蓝桥杯题目及解答 #### 题目描述 给定正整数 \( n \),求斐波那契数列的第 \( n \) 项。 注意:由于结果可能会非常大,因此要求输出的结果是对 10007 取模后的值。 输入格式:单个整数 \( n \) (\( 1 \leq n \leq 1,000,000 \))。 输出格式:一个整数,表示斐波那契数列第 \( n \) 项对 10007 的取模结果。 --- #### 解决方案 以下是基于动态规划的思想来解决该问题的一种高效方法: ```java import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); int n = input.nextInt(); // 初始化数组大小为 n+2 是为了方便索引操作 int[] F = new int[n + 2]; F[1] = 1; F[2] = 1; if (n > 2) { for (int i = 3; i <= n; i++) { F[i] = (F[i - 1] + F[i - 2]) % 10007; } } System.out.println(F[n]); } } ``` 上述代码通过循环迭代的方式计算斐波那契数列中的每一项,并利用取模运算防止溢出[^1]。这种方法的时间复杂度为 \( O(n) \),空间复杂度也为 \( O(n) \)。 如果希望进一步优化空间复杂度,则可以仅保留最近的两项来进行状态转移: ```java import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); int n = input.nextInt(); if (n == 1 || n == 2) { System.out.println(1); return; } int prev1 = 1; // 表示 F(i-1) int prev2 = 1; // 表示 F(i-2) for (int i = 3; i <= n; i++) { int current = (prev1 + prev2) % 10007; prev2 = prev1; prev1 = current; } System.out.println(prev1); } } ``` 此版本的空间复杂度降低至 \( O(1) \)[^4],而时间复杂度仍保持为 \( O(n) \)。 --- #### 黄金分割比例的应用 对于较大的 \( n \),可以直接近似使用黄金分割比例 \( \phi = \frac{\sqrt{5} + 1}{2} \approx 1.6180339887 \) 来估算斐波那契数列的比例关系。然而,在实际编程比赛中通常不会采用这种方式,因为浮点误差可能导致精度不足[^2]。 --- #### 大规模数据处理注意事项 当 \( n \) 较小时,直接存储整个序列即可;但如果 \( n \) 很大(例如达到百万级别),则需特别关注内存占用以及性能瓶颈。此外,还需考虑中间结果是否会超出 `long` 数据类型的范围。在这种情况下,提前对每一步结果进行取模是一种常见且有效的策略[^5]。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值