Java 吸血鬼数字高效算法

合集下载

java bigdecimal 取整进一法

java bigdecimal 取整进一法

java bigdecimal 取整进一法BigDecimal是Java中一个非常有用的工具类,用于精确处理高精度的浮点数运算。

在实际开发中,我们经常需要对浮点数进行取整操作,而取整进一法是其中一种常用的方式。

本文将围绕BigDecimal的取整进一法进行详细介绍和使用案例,同时会探讨在使用BigDecimal进行取整时需要注意的一些问题。

一、BigDecimal简介BigDecimal是Java中一个用于高精度计算的类,它能够准确表示任意大小的浮点数,并且可以保留指定的小数位数。

BigDecimal是不可变的,每次进行运算操作时都会返回一个新的BigDecimal对象,原对象不会被修改。

它支持四种取整方式:向上取整、向下取整、四舍五入、丢弃小数部分。

二、BigDecimal的取整进一法在实际的开发中,我们经常需要对浮点数进行取整操作。

取整进一法是一种常见的取整方式,即将浮点数向上取整到最接近它的整数。

对于正数来说,向上取整即是将小数舍去,保留整数部分,并加1;对于负数来说,向上取整即是将小数舍去,保留整数部分,并减1。

在使用BigDecimal进行取整操作时,可以使用setScale方法指定保留的小数位数,并使用RoundingMode.CEILING参数表示取整进一法。

三、BigDecimal取整进一法的使用示例以下是一个使用BigDecimal进行取整进一法的示例代码:```javaimport java.math.BigDecimal;import java.math.RoundingMode;public class BigDecimalRoundingUpExample {public static void main(String[] args) {BigDecimal number = new BigDecimal("3.1415926");//使用setScale方法指定保留小数位数为2,并使用RoundingMode.CEILING参数表示取整进一法BigDecimal roundedNumber = number.setScale(2, RoundingMode.CEILING);System.out.println("原始数值:" + number);System.out.println("取整结果:" + roundedNumber);}}```运行以上代码,输出结果如下:```原始数值:3.1415926取整结果:3.15```四、取整进一法的适用场景取整进一法适用于将浮点数向上取整的场景,例如:1.计算物品价格时,需要对价格进行向上取整,保证价格不低于实际成本;2.计算利息时,需要对利率进行向上取整,确保利率计算的准确性;3.对于货币的计算,由于货币最小单位通常是分,需要对计算结果进行向上取整,以避免出现金额损失。

java bigdecimal变科学计数法

java bigdecimal变科学计数法

java bigdecimal变科学计数法Java BigDecimal类是用于进行高精度数值计算的一个类。

在大数据计算或需要非常精确的计算时,常常会使用BigDecimal来处理浮点数。

而科学计数法表示方式是一种特殊的数字表示方法,可以用来表示极大或极小的数。

本文将介绍如何将BigDecimal转换为科学计数法以及如何从科学计数法中还原出具体的数字。

一、BigDecimal类简介BigDecimal类在Java中提供了高精度的十进制运算支持,它可以执行加、减、乘、除等操作,并且能够保留任意位数的小数位。

BigDecimal通过使用整数数组来存储数字,并且使用一个标记位来表示负号。

因此,BigDecimal可以用来处理超过Double和Float类型范围的数字。

二、使用BigDecimal转换为科学计数法1. 使用toEngineeringString()方法要将一个BigDecimal对象转换为科学计数法形式的字符串,可以使用toEngineeringString()方法。

```javaBigDecimal number = new BigDecimal("1000000000000000");String scientificNotation = number.toEngineeringString();System.out.println(scientificNotation);```运行上述代码会输出结果:1E+15,其中"1E+15"就是科学计数法表示的形式。

2. 使用toPlainString()方法另一种将BigDecimal对象转换为科学计数法形式字符串的方法是使用toPlainString()方法。

```javaBigDecimal number = new BigDecimal("1000000000000000");String scientificNotation = number.toPlainString();System.out.println(scientificNotation);```运行上述代码会输出结果:1000000000000000,这是BigDecimal对象在科学计数法形式下的准确表示。

java bigdecimal 剑法

java bigdecimal 剑法

Java BigDecimal 剑法本文介绍 Java 中 BigDecimal 类的使用方法和注意事项,包括BigDecimal 类的基本概念、主要方法和常见使用场景。

下面是本店铺为大家精心编写的5篇《Java BigDecimal 剑法》,供大家借鉴与参考,希望对大家有所帮助。

《Java BigDecimal 剑法》篇1在 Java 编程中,我们经常需要进行一些精确的数学计算,比如货币计算、科学计算等领域。

Java 中提供了 BigDecimal 类来满足这些需求。

BigDecimal 类是 Java 中用于处理高精度小数运算的重要类,它可以被用于做加法、减法、乘法和除法运算,同时保证了计算结果的精度。

一、BigDecimal 类的基本概念BigDecimal 类是 Java 中用于处理高精度小数运算的类。

它提供了一系列方法来进行数学运算,包括加法、减法、乘法、除法等。

BigDecimal 类的实例是不可变的,一旦创建,就无法更改其值。

在进行数学运算时,BigDecimal 类会自动将运算结果四舍五入到合适的精度,保证了计算结果的准确性。

二、BigDecimal 类的主要方法BigDecimal 类提供了一系列方法来进行数学运算,包括:1. 构造方法:BigDecimal 类提供了多个构造方法,用于创建BigDecimal 对象。

其中常用的构造方法包括:- BigDecimal(double):创建一个 BigDecimal 对象,并将double 类型的参数转换为 BigDecimal 类型。

- BigDecimal(String):创建一个 BigDecimal 对象,并将字符串类型的参数转换为 BigDecimal 类型。

2. 加法和减法方法:BigDecimal 类提供了 add(BigDecimal) 和 subtract(BigDecimal) 方法来进行加法和减法运算。

这些方法会返回一个新的 BigDecimal 对象,表示运算结果。

Java对BigDecimal常用方法的归类(加减乘除)

Java对BigDecimal常用方法的归类(加减乘除)

Java中的BigDecimal类提供了一系列方法来执行数字运算。

这些方法可以归为以下四类:加法、减法、乘法和除法。

1.加法方法:add(BigDecimal value):将指定的值加到此BigDecimal。

add(BigDecimal augend, MathContext mc):使用指定的上下文将此BigDecimal与另一个相加。

plus():返回此BigDecimal的正数值。

plus(MathContext mc):使用指定的上下文返回此BigDecimal的正数值。

2.减法方法:subtract(BigDecimal value):从此BigDecimal中减去指定的值。

subtract(BigDecimal subtrahend, MathContext mc):使用指定的上下文从此BigDecimal中减去另一个BigDecimal。

negate():返回此BigDecimal的负数值。

negate(MathContext mc):使用指定的上下文返回此BigDecimal的负数值。

3.乘法方法:multiply(BigDecimal value):将此BigDecimal乘以指定的值。

multiply(BigDecimal multiplicand, MathContext mc):使用指定的上下文将此BigDecimal乘以另一个BigDecimal。

pow(int n):返回此BigDecimal的n次幂。

pow(int n, MathContext mc):使用指定的上下文返回此BigDecimal的n次幂。

4.除法方法:divide(BigDecimal divisor):将此BigDecimal除以指定的值。

divide(BigDecimal divisor, MathContext mc):使用指定的上下文将此BigDecimal除以另一个BigDecimal。

吸血鬼算法

吸血鬼算法

public class FindNumber {/*** 7.写一个程序,找出4位数的所有吸血鬼的数字例如:1260=21*601827=21*87number 1000~9999abcd对应个个位置上的数* @param args*/public static void main(String[] args) {int number;int d[]=new int[4];int i;for(number=1000;number<10000;number++){int temp=number;for(i=0;i<4;i++){d[i]=temp%10;temp=temp/10;}int a,b,m,n;a=d[0];b=d[1];m=d[2];n=d[3];//列举出所有情况共十二种if(number==(a*10+b)*(m*10+n))System.out.println(number+"="+(a*10+b)+"*"+(m*10+n));//1 ab mn else if(number==(a*10+b)*(n*10+m))System.out.println(number+"="+(a*10+b)+"*"+(n*10+m));//2 ab nm else if(number==(a*10+m)*(b*10+n))System.out.println(number+"="+(a*10+m)+"*"+(b*10+n));//3 am bn else if(number==(a*10+m)*(n*10+b))System.out.println(number+"="+(a*10+m)+"*"+(n*10+b));//4 am nb else if(number==(a*10+n)*(m*10+b))System.out.println(number+"="+(a*10+n)+"*"+(m*10+b));//5 an mb else if(number==(a*10+n)*(b*10+m))System.out.println(number+"="+(a*10+n)+"*"+(b*10+m));//6 an bm else if(number==(b*10+a)*(m*10+n))System.out.println(number+"="+(b*10+a)+"*"+(m*10+n));//7 ba mn else if(number==(b*10+a)*(n*10+m))System.out.println(number+"="+(b*10+a)+"*"+(n*10+m));//8 ba nm else if(number==(b*10+m)*(n*10+a))System.out.println(number+"="+(b*10+m)+"*"+(n*10+a));//9 bm na else if(number==(b*10+n)*(m*10+a))System.out.println(number+"="+(b*10+n)+"*"+(m*10+a));//10 bn ma else if(number==(m*10+a)*(n*10+b))System.out.println(number+"="+(m*10+a)+"*"+(n*10+b));//11 ma nb else if(number==(m*10+b)*(n*10+a))System.out.println(number+"="+(m*10+b)+"*"+(n*10+b));//12 mb na}//}}。

java bigdecimal 取整进一法

java bigdecimal 取整进一法

Java中的BigDecimal类是用于高精度计算的类,它可以精确表示任意精度的十进制数。

在实际应用中,经常需要对BigDecimal进行取整操作,这篇文章将介绍如何使用进一法对BigDecimal进行取整操作。

1. BigDecimal类简介BigDecimal类位于java.math包中,它提供了高精度的十进制运算。

和基本数据类型(如double和float)相比,BigDecimal可以精确表示小数,并且不会出现舍入误差。

在财务计算和科学计算中,使用BigDecimal可以得到准确的结果。

2. BigDecimal的取整方法在Java中,对BigDecimal进行取整操作可以使用setScale方法。

setScale方法有两个参数,第一个参数是保留小数点后的位数,第二个参数是取整的模式。

3. 取整的模式在BigDecimal类中,取整的模式有四种:- BigDecimal.ROUND_UP:向远离零的方向取整,即正数向正无穷大取整,负数向负无穷大取整。

- BigDecimal.ROUND_DOWN:向靠近零的方向取整,即正数向零取整,负数向零取整。

- BigDecimal.ROUND_HALF_UP:四舍五入,当小数部分大于0.5时向远离零的方向取整。

- BigDecimal.ROUND_HALF_DOWN:四舍五入,当小数部分大于或等于0.5时向远离零的方向取整。

4. 进一法取整进一法是取整的一种常见方法,它指的是将小数部分大于0的数向正无穷大方向取整,将小数部分小于等于0的数向零方向取整。

在Java 中,可以使用ROUND_UP模式来实现进一法取整。

5. 示例代码下面是一个使用进一法对BigDecimal进行取整的示例代码:```javaimport java.math.BigDecimal;public class M本人n {public static void m本人n(String[] args) {BigDecimal num1 = new BigDecimal("3.14");BigDecimal num2 = new BigDecimal("-3.14");System.out.println(num1.setScale(0,BigDecimal.ROUND_UP)); // 输出3System.out.println(num2.setScale(0,BigDecimal.ROUND_UP)); // 输出-3}}```在示例代码中,先创建了两个BigDecimal对象num1和num2,分别表示3.14和-3.14。

吸血鬼数字、算法细想及JAVA源码

吸血鬼数字及java程序一、吸血鬼数字简介吸血鬼数字是指位数为偶数的数字,可以由一对数字相乘而得到,而这对数字各包含乘积的一半位数的数字,其中从最初的数字中选取的数字可以任意排序。

二、吸血鬼数字举例2.1. 四位吸血鬼数字4位数的吸血鬼数字有7个:1260, 1395, 1435, 1530, 1827, 2187, 6880。

详细信息为:第1组为:21*60=1260第2组为:93*15=1395第3组为:41*35=1435第4组为:51*30=1530第5组为:21*87=1827第6组为:81*27=2187第7组为:86*80=68802.2. 六位吸血鬼数字6位数的吸血鬼数字有141个:102510, 104260, 105210, 105264, 105750, 108135, 110758, 115672, 116725, 117067, 118440, 123354, 124483, 125248, 125433, 125460, 126027, 126846, 129640, 129775, 131242, 132430, 133245, 134725, 135828, 135837, 136525, 136948, 140350, 145314, 146137, 146952, 152608, 152685, 153436, 156240, 156289, 156915, 162976, 163944, 172822, 173250, 174370, 175329, 180225, 180297, 182250, 182650, 186624, 190260, 192150, 193257, 193945, 197725, 201852, 205785, 211896, 213466, 215860, 216733, 217638, 218488, 226498, 226872, 229648, 233896, 241564, 245182, 251896, 253750, 254740, 260338, 262984, 263074, 284598, 284760, 286416, 296320, 304717, 312475, 312975, 315594, 319059, 319536, 326452, 329346, 329656, 336550, 336960, 338296, 341653, 346968, 361989, 362992, 365638, 368550, 369189, 371893, 378418, 378450, 384912, 386415, 392566, 404968, 414895, 416650, 416988, 428980, 429664, 447916, 456840, 458640, 475380, 486720, 489159, 489955, 498550, 516879, 529672, 536539, 538650, 559188, 567648, 568750, 629680, 638950, 673920, 729688, 736695, 738468, 769792, 789250,789525, 792585, 794088, 809919, 809964, 815958, 829696, 841995, 939658。

leetcode hot 100 java题解详细注释版

leetcode hot 100 java题解详细注释版以下是LeetCode Hot 100 Java 题解详细注释版:1.两数之和题目描述:给定一个整数数组nums 和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。

解题思路:可以使用哈希表来解决该问题。

遍历数组,对于每个元素,计算出目标值与当前元素的差值,然后在哈希表中查找该差值是否存在,如果存在则返回对应的下标。

Java 代码实现:javapublic int[] twoSum(int[] nums, int target) {Map<Integer, Integer> map = new HashMap<>();for (int i = 0; i < nums.length; i++) {int complement = target - nums[i];if (map.containsKey(complement)) {return new int[]{map.get(complement), i};}map.put(nums[i], i);}return new int[]{};}1.盛最多水的容器题目描述:给定n 个非负整数a1,a2,...,an,每个数代表一个坐标点(i, ai)。

在坐标内画n 条垂直线,使得i 垂直线的两个端点分别为(i, ai) 和(i, 0)。

找出其中的两条线,使得它们与x 轴构成的容器可以容纳最多的水。

解题思路:可以使用贪心算法来解决该问题。

首先对数组进行升序排序,然后遍历数组,对于每个元素,计算当前位置的容量并更新最大容量。

为了得到最大容量,我们可以将前面的元素看作水池的左右壁,将后面的元素看作水池的高度。

Java 代码实现:javapublic int maxArea(int[] height) {Arrays.sort(height);int maxArea = 0;for (int i = 0; i < height.length; i++) {for (int j = i + 1; j < height.length; j++) {maxArea = Math.max(maxArea, Math.min(height[i], height[j]) * (j - i));}}return maxArea;}。

java生成数字不重复的方法

java生成数字不重复的方法有多种方法可以生成不重复的数字,下面列举几种常见的方法:1. 使用Set集合:将生成的数字添加到Set集合中,Set集合会自动去重。

继续生成数字直到Set集合中的数字个数达到要求。

```javaSet<Integer> set = new HashSet<>(;Random rand = new Random(;while (set.size( < numCount)int num = rand.nextInt(maxNum - minNum + 1) + minNum;set.add(num);int[] nums = new int[numCount];int index = 0;for (int num : set)nums[index++] = num;```2. 使用洗牌算法(Fisher–Yates算法):生成一个包含所有可能数字的数组,然后对数组进行洗牌,截取前n个数字作为结果。

```javaint[] nums = new int[maxNum - minNum + 1];for (int i = minNum; i <= maxNum; i++)nums[i - minNum] = i;Random rand = new Random(;for (int i = nums.length - 1; i >= 1; i--)int j = rand.nextInt(i + 1);int temp = nums[i];nums[i] = nums[j];nums[j] = temp;int[] result = Arrays.copyOf(nums, numCount);```3.使用递增的方式生成不重复的数字:初始数字为最小值,每次递增一个步长,直到生成足够的数字。

```javaint[] nums = new int[numCount];int num = minNum;for (int i = 0; i < numCount; i++)nums[i] = num;num += step;if (nums[numCount - 1] > maxNum)//数字超过了范围,需要适当调整int diff = nums[numCount - 1] - maxNum; for (int i = 0; i < numCount; i++) nums[i] -= diff;}。

java中随机生成数字的方法

Java中随机生成数字的方法在Java编程中,经常需要生成随机数字。

随机数字的生成可以用于各种场景,例如游戏开发、密码生成、数据模拟等。

本文将介绍Java中常用的几种随机生成数字的方法,并提供示例代码和解释。

Random类Java提供了Random类来生成伪随机数。

Random类的实例可以通过调用其方法来生成不同类型的随机数。

1. 生成整数使用Random类的nextInt()方法可以生成一个范围内的随机整数。

以下是一个示例代码:import java.util.Random;public class RandomExample {public static void main(String[] args) {Random random = new Random();int randomNumber = random.nextInt(100); // 生成0到99之间的随机整数System.out.println(randomNumber);}}上述代码创建了一个Random对象,然后调用nextInt(100)方法来生成0到99之间的随机整数。

运行程序会输出一个不同的整数。

2. 生成浮点数使用Random类的nextDouble()方法可以生成0到1之间(包括0但不包括1)的伪随机浮点数。

以下是一个示例代码:import java.util.Random;public class RandomExample {public static void main(String[] args) {Random random = new Random();double randomNumber = random.nextDouble(); // 生成0到1之间(包括0但不包括1)的随机浮点数System.out.println(randomNumber);}}上述代码创建了一个Random对象,然后调用nextDouble()方法来生成0到1之间的随机浮点数。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

importjava.util.Arrays;
public class Vampire{
public static void main(String[] arg) {
String[] ar_str1, ar_str2;
int sum = 0;
int from;
int to;
inti_val;
int count = 0;
// 双重循环穷举
for (int i = 10; i < 100; i++) { // 因为i 是两位数,所以i 的取值范围(10 ~ 99)
/*
* 当1000 / i <= i + 1 时j = i + 1,这样可以防止重复以前执行过的操作
* (不是很清楚为什么是i + 1,大概是i = j 时没有吸血鬼数字,而且,i = j 时也有重复操作)
* 例如:1000 / i = 16, i + 1 = 61 ,如果j 取16,则(i * j)为: 60 * 16, 60 * 17 ...
* 1000 / i = 62 , i + 1 = 17, j 取17,则(i * j)为: 16 * 17, ... , 16 * 60, ...
* 这样就重复操作了
*/
from = Math.max(1000 / i, i + 1); // j * i 得到四位数能取到的最小值, 且j > i
to = Math.min(10000 / i, 100); // j * i 得到四位数能取到的最大值(当前程序中
取值永远为100,可直接改为100) for (int j = from; j < to; j++) { // j 也应该是两位数,大于三位数一律跳过
i_val = i * j;
//给出筛选条件,进一步缩小范围,减去多余的动作,提高效率。

//条件①:吸血鬼数字不允许同时出现两个个位数为0 的数,所以能被
100 整除的一定不是吸血鬼数字//条件②:不是很清楚,但四位数(别的位数没验证不知道)的吸血鬼数
字确实可以在减去(i + j) 后,被9 整除。

if (i_val % 100 == 0 || (i_val - i - j) % 9 != 0) {
continue;
}
count++;
ar_str1 = String.valueOf(i_val).split("");
ar_str2 = (String.valueOf(i) + String.valueOf(j)).split("");
Arrays.sort(ar_str1);
Arrays.sort(ar_str2);
if (Arrays.equals(ar_str1, ar_str2)) {// 排序后比较,为真则找到一组
sum++;
System.out.println("第" + sum + "组: " + i + "*" + j + "=" + i_val);
}
}
}
System.out.println("共找到" + sum + "组吸血鬼数");
System.out.println(count);
}
}。

相关文档
最新文档