在做ACM相关题目是经常会遇到大数也就是很大的数据在c/c++中即使使用double类型有1e306但在1e100以后会变的非常不精确
误差很大,这时候就要用java处理,这里简单介绍一下java的使用;
进入到eclipse界面
第一步:file->new->java project->起名->finish
第二步:进入到刚才建的工程里,右键src->new->package->起名->finish
第三步:进入到刚才建的package里,右键name->new->class->起名(这里起名要注意,因为比赛时如果交java代码,这里的类名就要命名为Main,区分大小写)
下面就开始写我们的代码了
先从最简单的来说:
1.输出hello world
package BigInteger;
import java.util.*;//导包,相当于c/c++里的头文件
public class Main {
public static void main(String args[]) {
Scanner cin = new Scanner(System.in);
int a,b;
a = cin.nextInt();
b=cin.nextInt();
int ans = a + b;
System.out.println(ans);
}
}
2.计算a+b
package BigInteger;
import java.util.*;//导包,相当于c/c++里的头文件
public class Main {
public static void main(String args[]) {
Scanner cin = new Scanner(System.in);
int a,b;
a = cin.nextInt();
b=cin.nextInt();
int ans = a + b;
System.out.println(ans);
}
}
3 .多组输入a+b
package BigInteger;
import java.util.*;
public class Main {
public static void main(String args[]) {
Scanner cin = new Scanner(System.in);
int a,b;
while(cin.hasNext()) {
a=cin.nextInt();
b=cin.nextInt();
int ans=a+b;
System.out.println(ans);
}
}
}
然后是关于大数的处理:
首先我们需要导包,即BigIntegr类 和 BigDecimal类所在的包
import java,math.*;
*就代表导入包math里面所有的类,如果你不喜欢看到 *
那么你也可以写 import java,math.BigInteger; import java,math.BigDecimal; (相当于c/c++里的头文件)
大整数的简单运算:
import java.util.*;
import java.math.*;
public class Main {
public static void main(String args[]) {
Scanner cin = new Scanner(System.in);
BigInteger a , b, ans = null;
String c;
while(cin.hasNext()) {
a=cin.nextBigInteger();
c=cin.next();
b=cin.nextBigInteger();
if(c.compareTo("+")==0)
ans=a.add(b);
if(c.compareTo("-")==0)
ans=a.subtract(b);
if(c.compareTo("*")==0)
ans=a.multiply(b);
if(c.compareTo("/")==0)
ans=a.divide(b);
if(c.compareTo("%")==0)
ans=a.mod(b);
System.out.println(ans);
}
}
}
结果如下
关于BigDecimal的用法大致上和BigInteger一样。
不过这里需要提一下,在进行大浮点数运算的时候,小数点后面可能会含有多余的后导0
比如0.5000,在题目要求中可能只需要输出0.5
当然,有的题目可能还会要求小数点前面的0也要去掉,输入.5
这时候我们就需要去除掉后导0
方法如下:
String str;
str=ans.stripTrailingZeros().toPlainString();//去除后导0
//ans为大浮点数运算后得到的答案
//如果小数点前面的0也需要去掉,那么输出的时候处理一下即可:
if(str.charAt(0)=='0')
System.out.println(str.substring(1));
else
System.out.println(str);