ACM的java 傻瓜式教学
關于eclipse的配置 我感覺我講不清【逃
?
?
開始
從配好之后講起
文件名命名為Main.java【接下來幾行解釋為什么要起這個名字
注意第七行那里(為了方便復制我沒有加行號)的類的名字必須與文件名相同
但是你會看到各大oj的FAQ上有一些要求
比如hdu上有這個
然后貌似我今年去鞍山打區域賽的時候也有這個要求 所以就不要倔吧 就起這個名
?
“框架”
然后大概所謂“框架”就是這樣
import java.util.*; import java.io.*; import java.math.*; import java.text.*;public class Main{public static void main(String[] args){ Scanner cin = new Scanner(new BufferedInputStream(System .in));/*program*/} }
eclipse非常方便就是如果你少import了什么庫它會給你提示或者自動給你加
所以再也沒有之前剛開始學c學c++時 調用函數卻鬧不清頭文件的煩惱
?
之后默認的話是F11就編譯運行了~
?
函數
列了幾個我個人覺得比較實用的函數:
BigDecimal add(BigDecimal augend) :加法
BigDecimal subtract(BigDecimal subtrahend) :減法
BigDecimal divide(BigDecimal divisor) :除法
BigDecimal pow(int n) :乘冪
BigDecimal multiply(BigDecimal multiplicand) :乘法
int compareTo(BigDecimal number):比較兩個數 比如a.compareTo(b) a<b返回-1【<0】 a==b返回0 a>b返回1【>0】 很好記
public String substring(int beginIndex):相當于刪掉字符串的前幾位
public String substring(int beginIndex,int length):相當于取字符串中間一段 (注意第二個參數是長度而不是截止位置的下標)
BigDecimal stripTrailingZeros(BigDecimal number):對于一個高精度小數?從表示形式上移除所有尾部的無用零
String toPlainString(BigDecimal number):高精度小數轉字符串(進而可以方便地使用字符串處理函數)
?
實例
講多無謂 上幾個例子自己寫寫就懂了
hdu1042 大數階乘?
import java.util.*; import java.io.*; import java.math.BigInteger; import java.text.*;public class Main {public static void main(String[] args){ Scanner cin = new Scanner(new BufferedInputStream(System .in));int n;while(cin.hasNextInt()) //類似于以前判EOF的方式 {int a = cin.nextInt(); //整數讀入方法if(a == 0) //特判0! = 1 {System.out.println("1");continue;}BigInteger ans = BigInteger.valueOf(a); //valueOf()可以把數轉成各個類對應的類型for(int i = 2; i < a; i++){ans = ans.multiply(BigInteger.valueOf(i)); }System.out.println(ans);}} }個人覺得就像c++中類的成員函數的各種調用
?
?
hdu 2054
import java.util.*; import java.io.*; import java.math.*; import java.text.*;public class Main {public static void main(String[] args){ Scanner cin = new Scanner(new BufferedInputStream(System .in));BigDecimal a, b;while(cin.hasNext()){a = cin.nextBigDecimal();b = cin.nextBigDecimal();if(a.compareTo(b) == 0)System.out.println("YES");elseSystem.out.println("NO");}} }?
hdu 1047?
import java.util.*; import java.io.*; import java.math.*; import java.text.*;public class Main {public static void main(String[] args){ Scanner cin = new Scanner(new BufferedInputStream(System .in));int T;T = cin.nextInt();BigInteger a, b;BigInteger zero = new BigInteger("0");for(int i = 0; i < T; i++) //本來我習慣寫while(T--)的 不過這里面好像不行 {a = zero;while(true){b = cin.nextBigInteger();if(b.compareTo(zero) == 0)break;a = a.add(b);}System.out.println(a);if(i < T-1)System.out.printf("%n");//這里是特地這么寫的 ‘%n‘是跨平臺的換行符 這樣可以避免那個關于\r和\n的糾結問題//也可以寫成System.out.println(""); }} }?
hdu 1063
import java.util.*; import java.io.*; import java.math.*; import java.text.*;public class Main {public static void main(String[] args){ Scanner cin = new Scanner(new BufferedInputStream(System .in));while(cin.hasNextBigDecimal()){BigDecimal ans = new BigDecimal("1");BigDecimal a;int n;BigDecimal one = new BigDecimal("1");String anss;a = cin.nextBigDecimal();n = cin.nextInt();for(int i = 0; i < n; i++){ans = ans.multiply(a);}ans = ans.stripTrailingZeros();anss = ans.toPlainString();if(ans.compareTo(one) < 0){anss = anss.substring(1);System.out.println(anss);} else{System.out.println(anss);}}} } 關于stripTrailingZeros()舉個例子 不加這句話的話 如果運算1.1 + 2.9 結果會輸出4.0
加這個函數之后它就變成4了
這就是這個函數的作用
關于小數的最簡形式
0.1 需要改成 .1
雖然覺得怪怪的 不過在計算器上輸入“.1”它確實會識別出來
下面還有一道類似的題目
hdu 1316
import java.util.*; import java.io.*; import java.math.*; import java.text.*;public class Main {public static void main(String[] args){ Scanner cin = new Scanner(new BufferedInputStream(System .in));BigInteger fibo[] = new BigInteger[1010];fibo[0] = new BigInteger("1");fibo[1] = new BigInteger("2");for(int i = 2; i < 1000; i++)fibo[i] = fibo[i-1].add(fibo[i-2]);BigInteger a, b;BigInteger zero = new BigInteger("0");while(true){a = cin.nextBigInteger();b = cin.nextBigInteger();if(b.compareTo(zero) == 0)break;int ans = 0;boolean flag = false; //這里面是booleanfor(int i = 0; i < 1000; i++){if(!flag && fibo[i].compareTo(a) >= 0)flag = true;if(flag && fibo[i].compareTo(b) > 0)break;if(flag)ans++; }System.out.println(ans);}} }
這個程序我也是模仿別人的寫法的
然后我就特別好奇數組那里為毛兩次new
然后抱“老頭”(一個道骨仙風的世外高人)大腿之后才弄明白
對于第一個new:BigInteger fibo[] = new BigInteger[1010];
可以理解為C++中的 int *fibo[] 即,java中那種寫法它實際上只是為1010個指針分配的空間 而不像c++中 int fibo[1010] 就已經為數據開辟出一片空間了
所以第二個new:fibo[0] = new BigInteger("1");
之所以可以這么寫就比較自然了吧?
當然也可以不這么寫?
fibo[0] = BigInteger.valueOf(1); 這種寫法也是闊儀滴
?hdu 1715
import java.util.*; import java.io.*; import java.math.*; import java.text.*;public class Main {public static void main(String[] args){ Scanner cin = new Scanner(new BufferedInputStream(System .in));BigInteger fibo[] = new BigInteger[1010];fibo[1] = new BigInteger("1");fibo[2] = new BigInteger("1");for(int i = 3; i < 1010; i++)fibo[i] = fibo[i-1].add(fibo[i-2]);int T;T = cin.nextInt();for(int i = 0; i < T; i++){int n;n = cin.nextInt();System.out.println(fibo[n]); } } }hdu 1753
import java.util.*; import java.io.*; import java.math.*; import java.text.*;public class Main {public static void main(String[] args){ Scanner cin = new Scanner(new BufferedInputStream(System .in));BigDecimal a, b;while(cin.hasNextBigDecimal()){a = cin.nextBigDecimal();b = cin.nextBigDecimal();BigDecimal ans = a.add(b);ans = ans.stripTrailingZeros();String anss = ans.toPlainString();BigDecimal one = new BigDecimal("1");if(ans.compareTo(one) < 0){anss = anss.substring(1);System.out.println(anss);}else{System.out.println(anss);}}} }
刷完這些題之后對這里面最基本的操作就應該沒什么問題辣~
?
轉載于:https://www.cnblogs.com/dishu/p/4143822.html
總結
以上是生活随笔為你收集整理的ACM的java 傻瓜式教学的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jquery easyui 1.4.1
- 下一篇: MyEclipse运行tomcat提示严