數(shù)組的升序和降序
1.Arrays.sort (數(shù)組名),默認(rèn)是升序
2.Arrays.sort (數(shù)組名镣隶,int beginIndex, int endIndex)
對(duì)指定數(shù)組的指定范圍進(jìn)行升序
3.Arrays.sort(數(shù)組名,Collections.reverseOrder());
降序排列
4.集合排序: Collections.sort(List list) ,默認(rèn)也是升序
四舍五入保留小數(shù)
BigDecimal bigD = new BigDecimal("3.14159");
bigD.setScale(1)表示保留一位小數(shù),默認(rèn)用四舍五入方式
bigD.setScale(1,BigDecimal.ROUND_DOWN)直接刪除多余的小數(shù)位暖释,如2.35會(huì)變成2.3
bigD.setScale(1,BigDecimal.ROUND_UP)進(jìn)位處理锦针,2.35變成2.4
bigD.setScale(1,BigDecimal.ROUND_HALF_UP)四舍五入疟呐,2.35變成2.4
bigD.setScale(1,BigDecimal.ROUND_HALF_DOWN)四舍五入,2.35變成2.3唐全,如果是5則向下舍
對(duì)應(yīng)的參數(shù)定義如下:
ROUND_CEILING
Rounding mode to round towards positive infinity.
向正無窮方向舍入
ROUND_DOWN
Rounding mode to round towards zero.
向零方向舍入
ROUND_FLOOR
Rounding mode to round towards negative infinity.
向負(fù)無窮方向舍入
ROUND_HALF_DOWN
Rounding mode to round towards "nearest neighbor" unless both neighbors are equidistant, in which case round down.
向(距離)最近的一邊舍入,除非兩邊(的距離)是相等,如果是這樣蕊玷,向下舍入, 例如1.55 保留一位小數(shù)結(jié)果為1.5
ROUND_HALF_EVEN
Rounding mode to round towards the "nearest neighbor" unless both neighbors are equidistant, in which case, round towards the even neighbor.
向(距離)最近的一邊舍入邮利,除非兩邊(的距離)是相等,如果是這樣,如果保留位數(shù)是奇數(shù)垃帅,使用ROUND_HALF_UP 延届,如果是偶數(shù),使用ROUND_HALF_DOWN
ROUND_HALF_UP
Rounding mode to round towards "nearest neighbor" unless both neighbors are equidistant, in which case round up.
向(距離)最近的一邊舍入贸诚,除非兩邊(的距離)是相等,如果是這樣方庭,向上舍入, 1.55保留一位小數(shù)結(jié)果為1.6
ROUND_UNNECESSARY
Rounding mode to assert that the requested operation has an exact result, hence no rounding is necessary.
計(jì)算結(jié)果是精確的,不需要舍入模式
ROUND_UP
Rounding mode to round away from zero.
向遠(yuǎn)離0的方向舍入
printf 的使用
https://www.cnblogs.com/seakt/p/4478045.html
Java高精度使用
BigIngteger 可以表示任意大小的整數(shù)酱固,并且可以像使用int類的數(shù)字一樣進(jìn)行正常的計(jì)算械念。只不過加減乘除之類的操作都換成了方法調(diào)用
String temp1 = "-1000000000000000000000000000000000000";
BigInteger bg1 = new BigInteger(temp1); //注意初始化的方式,使用字符串來初始化
System.out.println(bg1.abs()); //絕對(duì)值方法 object.abs()
String temp2 = "100000000000000000000000000";
BigInteger bg2 = new BigInteger(temp2);
System.out.println(bg1.add(bg2)); //加法 object.add(BigInteger b)
System.out.println(bg1.subtract(bg2)); //減法 返回為 bg1 - bg2 (this - param)
System.out.println(bg1.multiply(bg2)); //乘法 返回 bg1 * bg2
System.out.println(bg1.divide(bg2)); //除法 返回bg1 / bg2
System.out.println(bg1.mod(bg2)); //取模運(yùn)算 返回的是 bg1%bg2 (this mod param)
System.out.println(bg1.gcd(bg2)); //直接封裝好了 求解bg1,bg2 的最大公約數(shù)
int temp5 = 5;
System.out.println(bg2.pow(temp5)); //乘方運(yùn)算 注意這個(gè)方法的參數(shù)是基本類型int
System.out.println(bg2.compareTo(bg1)); // 比較方法 結(jié)果為1 bg2大
System.out.println(bg1.compareTo(bg2)); // 結(jié)果為-1 bg2大
//這個(gè)地方注意比較的方法,還有一個(gè)方法是equal()
String temp3 = "1000";
String temp4 = "001000";
BigInteger bg3 = new BigInteger(temp3);
BigInteger bg4 = new BigInteger(temp4);
System.out.println(bg3.compareTo(bg4)); //結(jié)果為0 表示相等
System.out.println(bg3.equals(bg4)); //返回結(jié)果為true 這樣看是沒有區(qū)別媒怯,但是更推薦比較的時(shí)候使用compareTo()方法订讼,
//在BigDecimal更直觀,例如0.1 與0.10 扇苞,equal返回false 而compareTo則是正確的結(jié)果欺殿。
關(guān)于BigInteger詳解鏈接
https://docs.microsoft.com/zh-cn/dotnet/api/system.numerics.biginteger.one?view=net-6.0
關(guān)于BigDecimal詳解
String temp1 = "1.2222222222222222222222222";
BigDecimal bd1 = new BigDecimal(temp1);
String temp2 = "2.333333333333333333333333";
BigDecimal bd2 = new BigDecimal(temp2);
System.out.println(bd1.add(bd2)); // 加法 輸出 3.5555555555555555555555552
System.out.println(bd1.add(bd2).doubleValue()); // 輸出 3.5555555555555554 這里用了一個(gè)方法將結(jié)果轉(zhuǎn)化為double類型了
System.out.println(bd2.subtract(bd1)); //減法 輸出 1.1111111111111111111111108
System.out.println(bd2.subtract(bd1).doubleValue()); //輸出 1.1111111111111112
System.out.println(bd2.multiply(bd1)); //乘法 輸出 2.8518518518518518518518513925925925925925925925926
System.out.println(bd2.multiply(bd1).doubleValue()); //乘法 2.8518518518518516
System.out.println(bd2.divide(bd1, 5, RoundingMode.HALF_UP)); //除法應(yīng)該注意很有可能會(huì)有除不盡的情況寄纵,這時(shí)候會(huì)有異常拋出,所以要傳入控制參數(shù)
System.out.println(bd2.divide(bd1, 5, RoundingMode.HALF_UP).doubleValue()); //輸出都是 1.90909
System.out.println(bd1.compareTo(bd2)); //比較方法
BigDecimal bd3 = new BigDecimal("1.20");
BigDecimal bd4 = new BigDecimal("1.2");
System.out.println(bd3.compareTo(bd4)); //返回0表示相等
System.out.println(bd3.equals(bd4)); //返回的是false 是錯(cuò)誤的
//所以比較的時(shí)候使用compareTo()方法
Java求質(zhì)數(shù)
https://blog.csdn.net/dragon3100/article/details/100426407
https://blog.csdn.net/jinyeran/article/details/114479935
方法一:
雙重for循環(huán)脖苏,使除數(shù)和被除數(shù)各個(gè)計(jì)算程拭,效率低
//100之內(nèi)的質(zhì)數(shù)
public class Main{
public static void main(String []args){
for(int i = 2; i<100; i++){
boolean flag = true;
for(int j = 2; j<i; j++){
if(i%j == 0){
flag = false;
break;
}
}
if(flag){
System.out.println("質(zhì)數(shù):"+i);
}
}
}
}
方法二:
//已知質(zhì)數(shù)的和,求質(zhì)數(shù)及質(zhì)數(shù)個(gè)數(shù)
以下情況是當(dāng)質(zhì)數(shù)的和大于5時(shí)
L 是輸入的質(zhì)數(shù)和
int i = 5;
int sum = 5;//起始質(zhì)數(shù)的和
int n = 2;//起始質(zhì)數(shù)的個(gè)數(shù)
boolean flag = true;
while(flag){
for(int j=2; j<i; j++){
if(i%j == 0){
break; //先排除不是質(zhì)數(shù)的數(shù)
}
if(j == i-1 && sum+j<=L){
System.out.println(i);
sum+=j;
n++;
}
if(sum+j>L){
flag = false;
}
}
i++;
}
System.out.println(n);
方法三:
//num范圍內(nèi)的質(zhì)數(shù)
import java.util.Scanner;
public class Main{
public static void main(String []args){
boolean isPrime = true;
Scanner in = new Scanner(System.in);
System.out.println("請(qǐng)輸入一個(gè)正整數(shù)");
int num = in.nextInt();
if(num>0){
int k = (int)Math.sqrt(num);//num開平方
for(int i = 2; i<=k; i++){
if(num%i == 0){
ifPrime = false;//不是素?cái)?shù)
break;
}
}
}
if(isPrime){
System.out.println(num+"是質(zhì)數(shù)");
}else{
System.out.println(num+"不是質(zhì)數(shù)");
}
}
}
方法四:
100范圍內(nèi)的質(zhì)數(shù)
public class Main {
public static void main(String []args){
for(int i = 2; i<=100; i++){
for(int j = 2; j<=i; j++){
if(i%j==0 && i!=j){
break;
}
if(j==i){
System.out.println("質(zhì)數(shù):"+i);
}
}
}
}
}
普遍解法
根據(jù)質(zhì)數(shù)的定義棍潘,除了1和他本身沒有其他的因數(shù)恃鞋,就是質(zhì)數(shù),所以把數(shù)用 2~數(shù)本身-1的數(shù)字除余亦歉,看有沒有被整除恤浪,如果沒有就是質(zhì)數(shù),這個(gè)方法只適用于數(shù)較小的情況肴楷,數(shù)字太大會(huì)非常慢
int n = in.nextInt();
for (int i = 2; i < n - 1; i++)
if (n % i == 0){
return false;
}else{
return true;
}
根號(hào)解法
int n = nextInt();
for(int i = 2; i <= sqrt(n); i ++){
if(n%i == 0){
return false;
}
}
普通篩選法-
基本思想: 質(zhì)數(shù)的倍數(shù)一定不是質(zhì)數(shù)
實(shí)現(xiàn)方法: 用一個(gè)長度為 n+1 的數(shù)組保存信息(0表示質(zhì)數(shù)水由,1表示非質(zhì)數(shù),這個(gè)不是固定的也可以是1表示質(zhì)數(shù)赛蔫,0表示和數(shù))砂客,從第一個(gè)質(zhì)數(shù)2開始,把2 的倍數(shù)都標(biāo)記為非質(zhì)數(shù)(置為1)呵恢,一直到大于n鞠值,然后進(jìn)行下一趟找到2后面的下一個(gè)質(zhì)數(shù)3,進(jìn)行同樣的處理渗钉,直到最后數(shù)組中依然為0 的數(shù)即為質(zhì)數(shù)
public class Main{
public static void main(String []args){
int n = 100,sqrt(int)Math.sqrt(n),sum = 0;
boolean[] isPrime = new boolean[n+1];
isPrime[2] = true;
for(int i = 3; i < n; i+=2)
isPrime[i] = true;
for(int i = 3; i < sqr; i+=2)
if(isPrime[i])
for(int j = i*3;j<=n; j+=i<<1) //排除質(zhì)數(shù)的所有奇數(shù)倍
isPrime[j] = false;
for(int i = 2; i<n; i++){
if(isPrime[i])
System.out.println(i+" ")
}
}
}