hdu1002 经典a+b 计算大数问题 一直知道大数用java计算很方便 但是一直没有去学,还是太懒了 唉 ~~T_T
先贴代码,后边会说一些简单的入门知识和注意事项
hdu1002
//package hdu1133大数;
import java.io.*;
import java.util.*;
import java.math.*;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner cin = new Scanner(new BufferedInputStream(System.in));
int T;
T=cin.nextInt();
BigInteger a,b;
for(int i=1;i<=T;i++){
a=cin.nextBigInteger();
b=cin.nextBigInteger();
System.out.println("Case"+" "+i+":");
if(i<T){
System.out.println(a+" + "+b+" = "+a.add(b));
System.out.println();
}
else{
System.out.println(a+" + "+b+" = "+a.add(b));
}
}
}
}
注意:使用java提交acm题目
用Java交题时只需要粘贴包里面的内容,包名不需要。提交题目时类名一定要是 Main,不然判题系统是不认识。
下面说一些入门语法
首先,输入用Scanner类,包含在util包中;
可以 Scanner cin = new Scanner(System.in);
也可以 Scanner cin = new Scanner(new BufferedInputStream(System.in));
第二种 更快一些
import java.io.*
import java.util.*
public class Main
{
public static void main(String args[])
{
Scanner cin = new Scanner(new BufferedInputStream(System.in));
int T;
T=cin.nextInt();//输入T
....
}
}
其他输入
读一个整数: int n = cin.nextInt(); 相当于 scanf(“%d”, &n); 或 cin >> n;
读一个字符串:String s = cin.next(); 相当于 scanf(“%s”, s); 或 cin >> s;
读一个浮点数:double t = cin.nextDouble(); 相当于 scanf(“%lf”, &t); 或 cin >> t;
读一整行: String s = cin.nextLine(); 相当于 gets(s); 或 cin.getline(…);
判断是否有下一个输入可以用 cin.hasNext() 或 cin.hasNextInt() 或 cin.hasNextDouble() 等
while(cin.hasNext()) //等同于!=EOF
输出
输出一般直接用 System.out.print() 输出不带换行
和 System.out.println() 输出带换行。
import java.io.*
import java.util.*
public class Main
{
public static void main(String args[])
{
System.out.println("Hello world!");//输出Hello world! 然后换行
}
}
valueOf(),可将数据转换为指定类型:
比如:
int a = 3;
BigInteger b = BigInteger.valueOf(a);
//即b = 3;(int)
基础的运算:
add();// 加法
substract(); //减法
multiply(); //乘法
divided(); //相除取整
remainder(); //取余
pow(); //a.pow(b) = a ^ b
gcd(); //最大公约数
abs(); //绝对
negate(); //取反数
mod(); //a.mod(b) = a % b = a.remainder(b)
max(); min(); //最大最小
compareTo(); //比较
equals(); //比较是否相等
大数问题
Java中两个类BigDecimal(表示浮点数)和BigInteger(表示整数);
分别表示不可变的任意精度的整数和不可变的有符号的任意精度的十进制数(浮点数)。
主要用于高精度计算中。这两个类使得java中的大数,高精度运算变得很简单。
使用时注意每个单词首字母大写~新手很容易犯这个错/(ㄒoㄒ)/~~
使用这两个类的时候需要加上包 import java.math.*;
或是直接打
import java.math.BigInteger;
import java.math.BigDecimal;
声明
BigInteger a; BigDecimal b;
声明&&赋值 BigDecimal a=new BigDecimal("0");
赋值:
A=BigInteger.ONE //=1
B=BigInteger.TEN //=10
C=BigInteger.ZERO //=0
等价于:
BigInteger A = BigInteger.valueOf(1);
BigInteger B = BigInteger.valueOf(10);
BigInteger C = BigInteger.valueOf(0);
a+b 浮点数时候的写法
import java.util.*;
import java.math.*;
public class Main{
public static void main(String []args){
BigDecimal a;
BigDecimal b;
a=new BigDecimal("0");
b=new BigDecimal("0");
Scanner cin=new Scanner(System.in);
while(cin.hasNext())
{
a=cin.nextBigDecimal();
b=cin.nextBigDecimal();
a=a.add(b);
String str=a.stripTrailingZeros().toPlainString();
//stripTrailingZeros()这个方法是用来去掉末尾的0的。
//toPlainString()这个方法是使字符串大数变成普通的数字字符组成的字符串,
//如果不使用这个方法很可能数字变成了科学计数法,带E的那种。
System.out.println(str);
}
}
}