大数问题
前言
大数问题是蓝桥杯这几年的热门考点了,最近看面经的时候,我发现公司面试也喜欢问大数问题,可能蓝桥杯这样更贴近与实际需要吧,一般会有一道结果填空题是大数问题,属于送分题,拿下这题和前面的**算法,基本就可以稳住三等奖了。解决这类问题需要注意这几点就行了:
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