这两天学了一下JAVA的语法,还没有学习后面的核心地方,突然间觉得JAVA这门语言很棒,我要在接下来的时间系统的学习一下。就这么愉快地决定了。

Java对于大数计算这方面的优势很大。最重要的是代码量小了(时间复杂度我有点拿不准)。于是针对这两天对Java的摸索,写一篇日志。记录一下针对ACM来说常用的Java方面的东西。

1、输入

首先要想输入需要先包括:

import java.util.Scanner;

我们需要其中的 Scanner类声明的对象来扫描控制台输入。

针对A+B来说:(如果看不懂,请自行翻书,都讲得很清楚)

import java.util.Scanner;
public class Main //必须写成Main,否则CE
{
public static void main(String [] args)
{
Scanner cin = new Scanner(System.in);//对于Scanner 类声明对象cin用来扫描控制台输入
int a = cin.nextInt();
int b = cin.nextInt();
System.out.println(a+b);//输出a+b
cin.close();
}
}

读一个整数:  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(...); 

读一个大数:  BigInteger c = cin.nextBigInteger();

如果你想指教输入一个字符的话,可以这样:
Scanner in = new Scanner(System.in);
String str = in.nextLine();
char ch = str.charAt(0);
System.out.println(ch);

不过需要注意的是它们没有像scanf一样有判断是否输入到结尾的功能。

这时候需要用一个Scanner类的方法hasnext()来判断是否输入到文件结尾;

import java.math.*;//大数类在Java.math里面,如果不包括的话声明不了大数对象
import java.util.Scanner; public class Main
{
public static void main(String[] args)
{ BigInteger [] a=new BigInteger[]; //大数数组,动态开数组
a[]=BigInteger.ONE; //初始化,这里我现在还没看懂,我会写成a[0]=BigInteger.valueOf(1);把1强制转换成大数类
a[]=BigInteger.ONE;
a[]=a[].add(a[].add(a[]));
for(int i=;i<=;i++)
{
a[i]=a[i-].add(a[i-].add(a[i-]));
}
Scanner cin = new Scanner(System.in); //输入打开 while(cin.hasNext())//判断是否文件结束
{
int n=cin.nextInt();
System.out.println(a[n]); //输出
}
cin .close();//输入关闭
}
}

2、输出:

public class Main {
public static void main(String[] args)
{ // TODO Auto-generated method stub double d; d=9999.99999; System.out.format("%f",d); //9999.999990 没有回车 System.out.format("%10.10f",d).println(); //9999.9999900000 输出回车 System.out.format("%.4f",d).println(); //10000.0000 输出回车 System.out.format("%3.4f",d).println(); //10000.0000 输出回车 System.out.println(d); //输出当前变量 输出回车 System.out.println(); // 输出回车 System.out.printf("%f",d); //9999.999990 没有回车 System.out.print(d); //9999.99999 没有回车 }
}

当然,输出的时候也有对小数位数处理的方法:

0代表当前位向后都是0就输出0占位,#代表若当前位向后都是0就不输出这些位上的数字。

import java.text.DecimalFormat;
public class Main {
public static void main(String[] args) {
double num = 9.999;
DecimalFormat p3 = new DecimalFormat("#.00#");
DecimalFormat p4 = new DecimalFormat("#.000#");
DecimalFormat p5 = new DecimalFormat("#.0000#");
System.out.println(p3.format(num));//输出9.999
System.out.println(p4.format(num));//输出9.999
System.out.println(p5.format(num));//输出9.9990
}
}

3、高精度

对于大数来说,Java提供了BigDecimal和BigInteger两个类,都包含在java.math.*里面。

BigInteger是大整形类,BigDecimal是大浮点型类。

这两个类产生的对象没有数据范围,只要你的电脑内存足够就可以。

下面用BigInteger举个例子:

import java.math.BigInteger;

public class Main {

    public static void main(String[] args)

    {

        int a=,b=;

        BigInteger x,y,z;

        x=BigInteger.valueOf(a);            //转化赋值

        y=BigInteger.valueOf(b);

        System.out.println(x.add(y));      //加

        System.out.println(x.subtract(y)); //减

        System.out.println(x.multiply(y)); //乘

        System.out.println(x.divide(y));   //除

        System.out.println(x.mod(y));      //取余
}
}

4、进制转换

java一直就是作弊器一般的存在,就像它的进制转换函数一样:

public class Main {

    public static void main(String[] args)

    {
String string;
int a=;
int x=;
string = Integer.toString(a, x); //把int型数据转换乘X进制数并转换成string型
System.out.println(string); int b = Integer.parseInt(string, x);//把字符串当作X进制数转换成int型
System.out.println(b);
}
}

5、字符串

Java中的String   和char数组是完全不同的两种东西。

String中的字符是不能在原位置改变的,要改变必须改变并保存到新的String里,或者保存到char 数组里再修改

import java.io.*;
import java.util.*;
public class Main
{
public static void main(String[] args)
{
Scanner cin = new Scanner (new BufferedInputStream(System.in));
String st = "abcdefg";
System.out.println(st.charAt()); // st.charAt(i)就相当于st[i].
char [] ch;
ch = st.toCharArray(); // 字符串转换为字符数组.
for (int i = ; i < ch.length; i++){
ch[i] += ;//字符数组可以像C++ 一样操作
}
System.out.println(ch); // 输入为“bcdefgh”.
st = st.substring(); // 则从第1位开始copy(开头为第0位).
System.out.println(st);
st=st.substring(, ); //从第2位copy到第4位(不包括第4位)
System.out.println(st);//输出“de”
}
}

JAVA输入输出优化

用Scanner输入就像cin那样比较慢,当数据量一大会超时的,此时不得不用StreamTokenizer   和  PrintWriter

import java.io.*;

public class Main {
public static void main(String[] args) throws IOException
// in.nextTokenizer可能抛出这个异常
{
StreamTokenizer in = new StreamTokenizer(new BufferedReader(
new InputStreamReader(System.in)));
// 这句是io流包装来包装去,记住就好;
PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
int a, b;
while (in.nextToken() != StreamTokenizer.TT_EOF)
// 用in.nextToken()读下一个标记,StreamTokenizer.TT_EOF这个是个参数,就是EOF
{
a = (int) in.nval;
// 读进来的是double型的,所以要转成int
in.nextToken();
// 读入b值(a的值是在while循环中读入的)
b = (int) in.nval;
out.println(a + b);
}
out.flush();
// 刷新缓冲区,必须的,不然a+b会留在缓冲区
}
}

JAVA里一些常用的函数;

Arrays.sort(a);//排序,a是数组名,即地址

Arrays.binarySearch(a,x);//二分查找

System.out.println(a.add(b).stripTrailingZeros().toPlainString());  //去掉末尾的0 并转换成无科学计数法的字符串输出

//stripTrailingZeros()这个方法是用来去掉末尾的0的。
//toPlainString()这个方法是使字符串大数变成普通的数字字符组成的字符串,
//如果不使用这个方法很可能数字变成了科学计数法,带E的那种。
BigInteger.valueOf(1);//把1强制转换成大数类
cin.hasNextBigInteger();//输入大数!=EOF
s.equals("/");//判断字符串是否相等,与C++十分不同
.toPlainString.repalceAll(^0, "")去掉科学计数法和最前面的0.

JAVA与ACM的更多相关文章

  1. Java在ACM中的应用

    Java在ACM中的应用 —. 在java中的基本头文件(java中叫包) import java.io.*; import java.util.*; //输入Scanner import java. ...

  2. Java in ACM/ICPC

    目录 Java在ACM/ICPC中的特点 在ACM/ICPC中使用Java需要注意的问题 Java与高精度计算 1.Java在ACM/ICPC中的特点 Java的语法和C++几乎相同 Java在执行计 ...

  3. Java做acm所需要的基础知识之排序问题

    Java做acm所需要的基础知识. 以前做acm的题都是用C/C++来写代码的,在学习完Java之后突然感觉Java中的方法比C/C++丰富很多,所以就整理一下平时做题需要用到的Java基础知识. 1 ...

  4. 【经验总结】Java在ACM算法竞赛编程中易错点

    一.Java之ACM易错点 1. 类名称必须采用public class Main方式命名 2. 在有些OJ系统上,即便是输出的末尾多了一个“ ”,程序可能会输出错误,所以在我看来好多OJ系统做的是非 ...

  5. java在acm中常用基础技巧方法

    java在acm中常用基础技巧方法 如果学到了新的技巧,本博客会更新~ input input-std @Frosero import java.util.*; public class Main { ...

  6. [转] Java之ACM速成

    转载自:http://blog.csdn.net/skiffloveblue/article/details/7032290 相关题目:POJ 1131 1205 1220 1405 1503 160 ...

  7. Java在ACM中的使用

    1.基本框架   import java.oi.*;   import java.util.*   public class Main   {   public static void main(St ...

  8. [原创]浅谈JAVA在ACM中的应用

    由于java里面有一些东西比c/c++方便(尤其是大数据高精度问题,备受广大ACMer欢迎),所以就可以灵活运用这三种来实现编程,下面是我自己在各种大牛那里总结了一些,同时加上自己平时遇到的一些jav ...

  9. java编程acm基础

    java还是不错的昂! import java.util.*; import java.io.*; public class text{ static int a=100; public static ...

随机推荐

  1. TensorFlow基础笔记(4) Tensor Transformation

    https://segmentfault.com/a/1190000008793389 抽取 tf.slice(input_, begin, size, name=None):按照指定的下标范围抽取连 ...

  2. malloc 函数本身并不识别要申请的内存是什么类型

    malloc 函数本身并不识别要申请的内存是什么类型,它只关心内存的总字节数.我 们通常记不住 int, float 等数据类型的变量的确切字节数. 例如 int 变量在 16 位系统 下是 2 个字 ...

  3. Unity3d优化总结2

    优化: 1. 更新不透明贴图的压缩格式为ETC 4bit,因为android市场的手机中的GPU有多种, 每家的GPU支持不同的压缩格式,但他们都兼容ETC格式, 2. 对于透明贴图,我们只能选择RG ...

  4. 【wikioi】3160 最长公共子串(后缀自动机)

    http://codevs.cn/problem/3160/ sam的裸题...(之前写了spoj上另一题sam的题目,但是spoj被卡评测现在还没评测完QAQ打算写那题题解时再来详细介绍sam的.. ...

  5. typecho篇

    百度百科的介绍: Typecho是由type和echo两个词合成的,来自于开发团队的头脑风暴. Typecho基于PHP5开发,支持多种数据库,是一款内核强健﹑扩展 方便﹑体验友好﹑运行流畅的轻量级开 ...

  6. cocos2d怎么设置屏幕朝向?横屏 or 竖屏设置

    在cocos引擎里面找了好久.没找到相关接口,网上也搜索了好久,最后发现.原来须要依据各个平台分别进行设置. android 改动项目根文件夹 proj.android\AndroidManifest ...

  7. Linux心得记录

    2014.4.8 linux环境下如何删除一个目录? rm -r linux本身提供删除目录命令——rmdir,但是如果你要删除的目录中含有子目录或者子文件,那么该命令会提示“删除失败:目录非空“也就 ...

  8. KVC(Key-Value-Coding)和KVO(Key-Value-Observer)

    KVC(Key-Value-Coding)和KVO(Key-Value-Observer) 目录 概述 KVC的基本用法 KVC的运用 KVO的基本用法 KVO的运用 概述 键-值编码是一个用于间接访 ...

  9. 【BZOJ3648】寝室管理 树分治

    [BZOJ3648]寝室管理 Description T64有一个好朋友,叫T128.T128是寄宿生,并且最近被老师叫过去当宿管了.宿管可不是一件很好做的工作,碰巧T128有一个工作上的问题想请T6 ...

  10. Android APK反编译详解

    这段时间在学Android应用开发,在想既然是用Java开发的应该很好反编译从而得到源代码吧,google了一下,确实很简单,以下是我的实践过程. 在此郑重声明,贴出来的目的不是为了去破解人家的软件, ...