JAVA⼤数整除
请编写程序,从键盘输⼊⼀个整数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 Int();
int count=0;
BigInteger j=new BigInteger(String.valueOf(Long.MAX_VALUE));
j=j.add(BigInteger.valueOf(1));
while(count<3){
d(BigInteger.valueOf(n)).intValue()==0){
System.out.String());
++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 Int();
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);
}
java valueofbd.add(j);
}
sc.close();
}
}
具体原因(⼤数知识不⾜)
(-Range)32
⾸先BigDecimal不是⼤整数,它是对于⼩数进⾏了扩⼤,使得⼩数的精度可以达到10其中Range=2,对于整数范围没有确定;⽽BigInteger是⼤数(特指整数)没有⼩数位避免了精度问题。
代码中:在部分正确的代码中使⽤了BigDecimal.divide()这⼀⽅法,⼩数部分虽有很⼤的精度,但是也不能保证绝对相等;⽽利⽤d()或者ander()可以直接进⾏取余操作来判断是否为输⼊数的整数倍。(还在补充中)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论