大数BigDecimal相关
import java.math.BigDecimal;
public class BD {
public static void main(String[] args) {
// TODO Auto-generated method stub
// 构造函数
BigDecimal a = new BigDecimal(10);
BigDecimal b = new BigDecimal(10.5);
BigDecimal c = new BigDecimal(123456789101222L);
BigDecimal d = new BigDecimal("-123456.31");
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);
//四则运算
System.out.println(a.add(b).add(c).add(d));
System.out.println(a.subtract(b).subtract(a));
System.out.println(a.multiply(b).multiply(c));
System.out.println(c.divide(a).divide(new BigDecimal(20)));
System.out.println(d.divide(a));
System.out.println(d.doubleValue());
System.out.println(a.compareTo(a));// 0
System.out.println(a.compareTo(b));// -1
System.out.println(b.compareTo(a));// 1
BigDecimal aa = new BigDecimal(10.00);
BigDecimal bb = new BigDecimal(10.000);
BigDecimal cc = new BigDecimal(200);
System.out.println(aa.equals(aa));// true?
System.out.println(aa.equals(bb));// true?
System.out.println(aa.equals(cc));//false
}
}
大数BigInteger相关:
import java.math.BigInteger;
import java.util.Scanner;
public class BI {
public static void main(String[] args) {
// TODO Auto-generated method stub
//构造函数
Scanner sc = new Scanner(System.in);
BigInteger a = sc.nextBigInteger();
BigInteger b = sc.nextBigInteger();
System.out.println(a);
System.out.println(b);
//加法
System.out.println(a.add(b));
System.out.println(a.add(a));
System.out.println(a.add(b).add(b));
//减法
System.out.println(a.subtract(a));
System.out.println(a.subtract(b));
System.out.println(b.subtract(a).subtract(a));
//乘法
System.out.println(a.multiply(a));
System.out.println(a.multiply(b));
System.out.println(a.multiply(b).multiply(b));
//除法
System.out.println(a.divide(a));
System.out.println(a.divide(b));//10/2000=0
System.out.println(b.divide(a));
System.out.println(b.divide(a).divide(a));
//取模
BigInteger mod = BigInteger.valueOf(3);
System.out.println(b.mod(mod));
}
}
输入输出流
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
public class EnterTest {
public static void main(String[] args) { //主方法
CharTest(); //调用System.in方法
ReadTest(); //调用ReadTest方法
ScannerTest();//调用ScannerTest方法
}
/**
* System.in和System.out方法
* 缺点一: 该方法能获取从键盘输入的字符,但只能针对一个字符的获取
* 缺点二: 获取的只是char类型的。如果想获得int,float等类型的输入,比较麻烦。
*/
public static void CharTest(){
try{
System.out.print("Enter a Char:");
char i = (char)System.in.read();
System.out.println("Yout Enter Char is:" + i);
}
catch(IOException e){
e.printStackTrace();
}
}
/**
* InputStreamReader和BufferedReader方法
* 优点: 可以获取键盘输入的字符串
* 缺点: 如何要获取的是int,float等类型的仍然需要转换
*/
public static void ReadTest(){
System.out.println("ReadTest, Please Enter Data:");
InputStreamReader is = new InputStreamReader(System.in); //new构造InputStreamReader对象
BufferedReader br = new BufferedReader(is); //拿构造的方法传到BufferedReader中
try{ //该方法中有个IOExcepiton需要捕获
String name = br.readLine();
System.out.println("ReadTest Output:" + name);
}
catch(IOException e){
e.printStackTrace();
}
}
/**
* Scanner类中的方法
* 优点一: 可以获取键盘输入的字符串
* 优点二: 有现成的获取int,float等类型数据,非常强大,也非常方便;
*/
public static void ScannerTest(){
Scanner sc = new Scanner(System.in);
System.out.println("ScannerTest, Please Enter Name:");
String name = sc.nextLine(); //读取字符串型输入
System.out.println("ScannerTest, Please Enter Age:");
int age = sc.nextInt(); //读取整型输入
System.out.println("ScannerTest, Please Enter Salary:");
float salary = sc.nextFloat(); //读取float型输入
sc.close();
System.out.println("Your Information is as below:");
System.out.println("Name:" + name +"\n" + "Age:"+age + "\n"+"Salary:"+salary);
}
}
求 A+B 去掉小数点后无用的0.
HDU - 1753
ac code :
import java.util.*;
import java.math.*;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner (System.in);
BigDecimal a,b;
while(sc.hasNext()){
a=sc.nextBigDecimal();
b=sc.nextBigDecimal();
a=a.add(b);
System.out.println(a.stripTrailingZeros().toPlainString());
}
sc.close();
}
}
对字符串的简单处理
HDU - 2100
26进制的加法输出结果任为26进制。
import java.util.*;
import java.math.*;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner (System.in);
while(sc.hasNext()){
BigInteger a = BigInteger.ZERO;
BigInteger b = BigInteger.ZERO;
BigInteger base = BigInteger.ONE;
String aa = sc.next();
String bb = sc.next();
int alen = aa.length();
int blen = bb.length();
for(int i=alen-1;i>=0;i--){
int num = aa.charAt(i)-'A';
a=a.add(BigInteger.valueOf(num).multiply(base));
base= base.multiply(BigInteger.valueOf(26));
}
base=BigInteger.ONE;
for(int i=blen-1;i>=0;i--){
int num = bb.charAt(i)-'A';
b=b.add(BigInteger.valueOf(num).multiply(base));
base=base.multiply(BigInteger.valueOf(26));
}
a=a.add(b);
String ans="";
while(!a.equals(BigInteger.ZERO)){
//System.out.println(13);
int tmp = a.mod(BigInteger.valueOf(26)).intValue();
ans+=(char)(tmp+'A');
a=a.divide(BigInteger.valueOf(26));
}
//System.out.println(ans.length());
for(int i=ans.length()-1;i>=0;i--){
System.out.print(ans.charAt(i));
}
System.out.println();
}
sc.close();
}
}
2018焦作区域赛E题:
Resistors in Parallel
只要推出来结论暴力大数即可。
import java.util.*;
import java.math.*;
public class JiaozuoE {
public static void main(String[] args){
BigInteger a[] = new BigInteger [1000];
int cnt = 0;
for(int i=2;i<=1000;i++){
int flag = 0;
for( int j=2;j<=i/2;j++){
if(i%j==0){
flag=1;
break;
}
}
if(flag==0){
BigInteger tmp = BigInteger.valueOf(i);
a[cnt++]=tmp;
//System.out.println(a[cnt-1]);
}
}
Scanner sc = new Scanner (System.in);
int t = sc.nextInt();
for(int i=1;i<=t;i++){
BigInteger c = sc.nextBigInteger();
BigInteger d = BigInteger.ONE;
int cont = 0;
while(d.compareTo(c)<=0){
BigInteger tmp = a[cont];
d=d.multiply(tmp);
cont++;
}
BigInteger ans1 = BigInteger.ONE;
BigInteger ans2 = BigInteger.ONE;
for(int g=0;g<cont-1;g++){
BigInteger tmp = a[g];
ans1 = ans1.multiply(tmp);
BigInteger bb = BigInteger.ONE;
ans2 = ans2.multiply(tmp.add(bb));
}
BigInteger gc = ans1.gcd(ans2);
System.out.println(ans1.divide(gc)+"/"+ans2.divide(gc));
}
sc.close();
}
}