ACM中的java的使用;

java大法好,退C保平......开玩笑的;php

一、头文件:

import java.math.*; // 包含大数类的包 
  
import java.util.*;  // 包含输入头的包 

二、程序主体,以及类名必须为Main:

public class Main{ public static void main(String args[]){ Scanner cin = newScanner(System.in);        // 输入必备句 
 } } 

三、有关函数:

运算类:

//d为int型,a,b,c都为大数 
c=a.add(b);             // 相加 
c=a.subtract(b);       // 相减 
c=a.multiply(b);          // 相乘 
c=a.divide(b);        // 相除取整 
c=a.gcd(b);          // 最大公约数 
c=a.remainder(b);   // 取余 
c=a.mod(b);         // a mod b 
c=a.abs();           // a的绝对值 
c=a.negate();        // a的相反数 
c=a.pow(d);           // a的b次幂 d为int型 
c=a.max(b);           // 取a,b中较大的 
c=a.min(b);                // 取a,b中较小的 
d=a.compareTo(b);      // 比较a与b的大小 d=-1小于 d=0等于 d=1大于 d为int型 
a.equals(b);            // 判断a与b是否相等 相等返回true 不相等返回false 

类型转换类:

d=a.intValue();      // 将大数a转换为 int 类型赋值给 d 
e=a.longValue();     // 将大数a转换为 long 类型赋值给 e 
f=a.floatValue();    // 将大数a转换为 float 类型赋值给 f 
g=a.doubleValue();   // 将大数a转换为 double 类型赋值给 g 
s=a.toString();      // 将大数a转换为 String 类型赋值给 s 
<span style="color:#ff0000;">s=a.toPlainString();  //将大数a转换为String类型赋值给s,且不表示为科学计数法</span> 
a=BigInteger.valueOf(e);  // 将 e 以大数形式赋值给大数 a e只能为long或int 
a=newBigInteger(s, d);  // 将s数字字符串以d进制赋值给大数a若是d=s字符数字的进制则等同于将数字字符串以大数形式赋值给大数a 

进制转换类:

String st = Integer.toString(num, base); //把int型num当10进制的数转成base进制数存入st中 (base <= 35). 
int num = Integer.parseInt(st, base); //把st当作base进制,转成10进制的int 
(parseInt有两个参数,第一个为要转的字符串,第二个为说明是什么进制). BigInter m = new BigInteger(st, base); // st是字符串,base是st的进制. 
BigInteger a; int b; Stringc; a=cin.nextBigInteger(b);   //以b进制读入一个大数赋值给a 
c=a.toString(b);          // 将大数a以b进制的方式赋给字符串c 
a=newBigInteger(c, b);  //把c 当作“b进制“转为十进制大数赋值给a 

 例:hdu1250  http://acm.hdu.edu.cn/showproblem.php?pid=1250java

题目大意:斐波那契数列;ide

import java.util.*; import java.math.*; public class Main { public static void main(String[] args) { Scanner cin=new Scanner(System.in); while(cin.hasNext()){ int n=cin.nextInt(); BigInteger ans[]=new BigInteger[10000]; //BigInteger tmp1=BigInteger.valueOf(1); //BigInteger tmp2=BigInteger.valueOf(1);
            ans[1]=ans[2]=ans[3]=ans[4]=BigInteger.ONE; for(int i=5;i<=n;i++) { ans[i]=ans[i-1].add(ans[i-2]).add(ans[i-3]).add(ans[i-4]); } System.out.println(ans[n]); } } }

 例:hdu1753  http://acm.hdu.edu.cn/showproblem.php?pid=1753函数

题目大意:两个大数浮点数相加;spa

import java.util.*; import java.math.*; public class Main { public static void main(String[] args) { Scanner cin =new Scanner(System.in); while(cin.hasNext()){ BigDecimal a,b; while(cin.hasNext()){ a=cin.nextBigDecimal(); b=cin.nextBigDecimal(); System.out.println(a.add(b).stripTrailingZeros().toPlainString()); } } } }

PS: 有用java水了一道,这里注意下要求最简形式,可能会出现4.0或者1e5等形式,因此用stripTrailingZeros()函数去除末尾0,用toPlainString()函数转成广泛计数法输出。code

相关文章
相关标签/搜索