概述
请编写程序,从键盘输入一个整数n,找出大于long.MAX_VALUE且能被n整除的前3个数字。
大于long.MAX_VALUE的数字 需要用到大数类型的数据类型。
输入格式:
输入一个作为除数的整数n,例如: 17
输出格式:
输出大于long.MAX_VALUE且能被n整除的前3个数字,例如下列三个数能被17整除且大于long.MAX_VALUE: 9223372036854775816 9223372036854775833 9223372036854775850
输入样例:
103
输出样例:
9223372036854775832
9223372036854775935
9223372036854776038
正确的代码:
import java.math.BigInteger;
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner input=new Scanner(System.in);
int n=input.nextInt();
int count=0;
BigInteger j=new BigInteger(String.valueOf(Long.MAX_VALUE));
j=j.add(BigInteger.valueOf(1));
while(count<3){
if(j.mod(BigInteger.valueOf(n)).intValue()==0){
System.out.println(j.toString());
++count;
}
j=j.add(BigInteger.valueOf(1));
}
input.close();
}
}
部分正确的代码:
import java.math.BigDecimal;
import java.util.Scanner;
public class ThreeMax {
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
double str=(double)Long.MAX_VALUE;
int count=0;
BigDecimal bd = new BigDecimal(str);
BigDecimal i= new BigDecimal(1.0);
BigDecimal j= new BigDecimal(0.0);
while(count<3){
BigDecimal ef=bd.divide(BigDecimal.valueOf(n),6);
if (ef.subtract(BigDecimal.valueOf(0))==j)
{ count++;
System.out.println(bd);
}
bd.add(j);
}
sc.close();
}
}
具体原因(大数知识不足)
首先BigDecimal不是大整数,它是对于小数进行了扩大,使得小数的精度可以达到10(-Range)其中Range=232,对于整数范围没有确定;而BigInteger是大数(特指整数)没有小数位避免了精度问题。
代码中:在部分正确的代码中使用了BigDecimal.divide()这一方法,小数部分虽有很大的精度,但是也不能保证绝对相等;而利用BigInteger.mod()或者BigDecimal.remander()可以直接进行取余操作来判断是否为输入数的整数倍。(还在补充中)
javaAPI地址如下:
https://tool.oschina.net/apidocs/apidoc?api=jdk-zh
最后
以上就是迷人早晨为你收集整理的JAVA大数整除的全部内容,希望文章能够帮你解决JAVA大数整除所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复