大数问题

前言

大数问题是蓝桥杯这几年的热门考点了,最近看面经的时候,我发现公司面试也喜欢问大数问题,可能蓝桥杯这样更贴近与实际需要吧,一般会有一道结果填空题是大数问题,属于送分题,拿下这题和前面的**算法,基本就可以稳住三等奖了。解决这类问题需要注意这几点就行了:
1.知道BigInteeger中的常见方法(加减乘除,等于)
2.了解String类中的基本操作
3.有基本的算法设计思路(刷过一定数量的题)
4.当数超过19位的时候就要用BigInteeger了
在比赛中会有帮助文档可供查询,所以一定要学会怎么使用帮助文档。有的同学就会想反正有帮助文档就不用去了解BigInteeger这个类中的方法了,到时候有问题去查帮助文档就行了,这种思想肯定是错误的哈,一是比赛的时候如果每个方法都去查文档太耽误时间,二是如果你不知道常用的方法你根本就构建不了思路,下面列举几个常用方法
BigInteger add(BigInteger val) 返回其值为 (this + val) 的 BigInteger

BigInteger abs() 返回其值是此 BigInteger 的绝对值的 BigInteger

int compareTo(BigInteger val) 将此 BigInteger 与指定的 BigInteger 进行比较。

BigInteger divide(BigInteger val) 返回其值为 (this / val) BigInteger。

boolean equals(Object x) 比较此 BigInteger 与指定的 Object 的相等性。

BigInteger pow(int exponent) 返回其值为 (thisexponent) 的 BigInteger。

BigInteger subtract(BigInteger val) 返回其值为 (this - val) 的 BigInteger。

String toString(int radix) 返回此 BigInteger 的给定基数的字符串表示形式。
这几个方法一定要掌握,其他的方法可以到时候再查帮助文档

例题

【编程大题】花朵数
一个 N 位的十进制正整数,如果它的每个位上的数字的 N 次方的和等于这个数本身,
则称其为花朵数。
例如:当 N=3 时,153 就满足条件,因为 1^3 + 5^3 + 3^3 = 153,这样的数字也被称为
水仙花数(其中,“”表示乘方,53 表示 5 的 3 次方,也就是立方)。
当 N=4 时,1634 满足条件,因为 1^4 + 6^4 + 3^4 + 4^4 = 1634。
当 N=5 时,92727 满足条件。
实际上,对 N 的每个取值,可能有多个数字满足条件。
程序的任务是:求 N=21 时,所有满足条件的花朵数。注意:这个整数有 21 位,它的
各个位数字的 21 次方之和正好等于这个数本身。
如果满足条件的数字不只有一个,请从小到大输出所有符合条件的数字,每个数字占一
行。因为这个数字很大,请注意解法时间上的可行性。要求程序在 1 分钟内运行完毕。
【程序运行参考结果】
128468643043731391252
449177399146038697307

import java.math.BigInteger;

public class Main {
	public static void main(String[] args) {
		//System.out.println(Long.MAX_VALUE);
		BigInteger i=new BigInteger("100000000000000000000");
		BigInteger max=new BigInteger("999999999999999999999");
		while(max.compareTo(i)>=0){
			BigInteger sum2=new BigInteger("0");
			for(int j=0;j<21;++j){
				BigInteger temp=new BigInteger(i.toString().substring(j, j+1));
				sum2=sum2.add(temp.pow(21));
				if(sum2.toString().length()>21)
					break;
			}
			if(sum2.equals(new BigInteger("128468643043731391252")))
			System.out.println(sum2.toString());
			if(sum2.equals(i))
				System.out.println(sum2.toString());
			i=i.add(new BigInteger("1"));
		}	
	}
}

总结

从这题我们可以看出大数问题一般都不难,这题就是改版的水仙花数,难度真的很一般,希望大家加油哈。附上java帮助文档
https://download.csdn.net/my
大数问题

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-01-15
  • 2021-07-02
  • 2022-01-24
  • 2021-12-14
  • 2021-09-26
猜你喜欢
  • 2022-12-23
  • 2021-08-08
  • 2022-12-23
相关资源
相似解决方案