打2017icpc沈阳站的时候遇到了大数的运算,发现java与c++比起来真的很赖皮,竟然还有大数运算的函数,为了以后打比赛更快的写出大数的算法并且保证不错,特意在此写一篇博客,
记录java的大数运算,也算是ACM java写法的入门:
学习博客:https://www.cnblogs.com/wkfvawl/p/9377441.html
进入到eclipse界面
第一步:file->new->java project->起名->finish
第二步:进入到刚才建的工程里,右键src->new->package->起名->finish
第三步:进入到刚才建的package里,右键name->new->class->起名(这里起名要注意,因为比赛时如果交java代码,这里的类名就要命名为Main,区分大小写)
1.Java的输入与输出
Java的输入是先定义一个scanner,然后用这个进行输入,并且每一种输入都有相应的输入函数,具体如下:
Scanner cin =new Scanner(System.in); int a; double b; BigInteger c; String d; a=cin.nextInt(); b=cin.nextDouble(); c=cin.nextBigInteger(); d=cin.next(); //每种类型都有相应的函数输入 System.out.println(a); System.out.println(b); System.out.println(c); System.out.println(d);
下面给几个入门代码:
输出Hello World
package ACM代码; import java.math.BigInteger; import java.util.Scanner; public class Main { public static void main(String args[]) { System.out.println("Hello World!"); } }
计算a+b
package ACM代码; import java.math.BigInteger; import java.util.Scanner; public class Main { public static void main(String args[]) { Scanner cin=new Scanner(System.in); int a,b; a=cin.nextInt(); b=cin.nextInt(); System.out.println(a+b); } }
多组输入输出
package ACM代码; import java.math.BigInteger; import java.util.Scanner; 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(); System.out.println(a+b); } } }
2、下面是重头戏了,大数处理!
下面就开始说大数的相关操作
首先我们需要导包,即BigIntegr类 和 BigDecimal类所在的包
import java,math.*;
*就代表导入包math里面所有的类,如果你不喜欢看到 *
那么你也可以写 import java,math.BigInteger; import java,math.BigDecimal;
1.大整数的加减乘除求余等计算:
/* * 大数的加减运算不同于普通函数的加减乘除运算 * 加----a+b:a=a.add(b) * 减----a-b:a=a.subtract(b) * 乘----a*b:a=a.multiply(b) * 除----a/b:a=a.divide(b) * 求余--a%b:a=a.mod(b) * 转换--a=b:b=BigInteger.valueOf(a) * 比较--if(ans.compareTo(x)==0) System.out.println("相等") * System.out.println("a + b = "+ans_add); // 这里的‘+’ (第二个) 是连接的意思 */ package ACM代码; import java.math.BigInteger; import java.util.Scanner; public class Main { public static void main(String args[]) { Scanner cin=new Scanner(System.in); BigInteger a,b,x,y; BigInteger ans_add,ans_sub,ans_mul,ans_div,ans_mod; a=cin.nextBigInteger(); b=cin.nextBigInteger(); ans_add=a.add(b); ans_sub=a.subtract(b); ans_mul=a.multiply(b); ans_div=a.divide(b); ans_mod=a.mod(b); x=BigInteger.valueOf(1);//转化 System.out.println("a+b="+ans_add); System.out.println("a-b="+ans_sub); System.out.println("a*b="+ans_mul); System.out.println("a/b="+ans_div); System.out.println("a%b="+ans_mod); System.out.println("x="+x); if(a.compareTo(b)==0) //比较是否相等 System.out.println("相等"); else System.out.println("不相等"); } }
3、下面来几道题目练练手:
UVA—10106:a*b
题目链接:https://vjudge.net/problem/UVA-10106
看代码:
import java.math.BigInteger; import java.util.Scanner; public class Main { public static void main(String args[]) { Scanner cin=new Scanner(System.in); BigInteger a,b; while(cin.hasNext()) { a=cin.nextBigInteger(); b=cin.nextBigInteger(); System.out.println(a.multiply(b)); } } }