开头
首先,有几点需要注意的
名词大致对应关系(Java —> C的对应关系,单纯针对没学过C++的同学,学过C++可无视)
- 方法 —> 函数
- 成员变量 —> 变量
- 一个xxx对象 —> 一个xxx结构体变量 + 处理这个变量的函数集合
- xxx的成员函数 —> 可以对xxx结构体内的变量进行操作的一类函数
在 ACM 中提交 Java 的类名必须是 Main,且不包含包名.
一般来说 Java 提交的代码格式都是这样
1 | //常用的工具类,包括输入等 |
而大数处理就需要用到 java.math
中的 BigInteger
类 和BigDecimal
类. 其中,BigInteger
用于处理大整数, BigDecimal
用于处理浮点数
在 Java 中,你完全可以使用 C/C++ 的语法,但是要注意一点: bool类型在 Java 中是Boolean
,而且不能用0,1
一类的数值赋值,只能用 true
/false
.如下:
1 | public class Main { |
对于基本型变量(int,char,byte,float一类),在 Java 中是值传递的(对比 C/C++中的 =
号).但是对于对象却是用的引用传递(类似指针的一个东西)
也就是说在对象中,对于对象的赋值最好不直接用 =
进行赋值,而是用自己写的方法(如BigInteger中的13-15行)进行赋值.因为在某个版本的库中如果返回的不是一个 new 的对象的话就相当于 C/C++ 中2个指针指向了同一处地址
通用
比较
BigInteger
和 BigDecimal
的数值比较都需要用到 compareTo
方法.需要注意的是,该方法返回的是 int
类型.也就是说不能用if(a.compareTo(b))
的形式.(前面讲过int
不能用于对Boolean
赋值,所以不能将其隐式转换为Boolean
)
通常,我们都用以下语句进行判断
1 | if(x.compareTo(y) <op> 0)//其中 <op> 是六个比较运算符之一,如 >, <, =。 |
示例
1 | import java.math.BigDecimal; |
BigInteger
1 | /** |
BigDecimal
1 | /** |