java在acm中的一些应用

这两天遇到了一些关于大数据处理的题目,发现Java对于这方面的优势很大。最重要的是代码量小了。于是针对这两天对Java的摸索,写一篇日志。记录一下针对ACM来说常用的Java方面的东西。

1、输入

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

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. import java.util.*;   
  2.   
  3.    

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

针对A+B来说:

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. import java.util.*;  
  2. public class Main  
  3. {  
  4.     public static void main(String [] args)  
  5.     {  
  6.         Scanner cin = new Scanner(System.in);//对于Scanner 类声明对象cin用来扫描控制台输入  
  7.         int a = cin.nextInt();  
  8.         int b = cin.nextInt();  
  9.         System.out.println(a+b);//输出a+b  
  10.         cin.close();  
  11.     }  
  12. }  

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


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


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


例如POJ2506 这是一个针对大数处理的递推题。用Java就很好解决。

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. import java.math.*;//大数类在Java.math里面,如果不包括的话声明不了大数对象  
  2. import java.util.*;  
  3.   
  4. public class Main  
  5. {  
  6.     public static void main(String[] args)  
  7.     {  
  8.   
  9.         // TODO Auto-generated method stub  
  10.         /*sss*/  
  11.         BigInteger [] a=new BigInteger[255]; //大数数组  
  12.         a[0]=BigInteger.ONE; //初始化  
  13.         a[1]=BigInteger.ONE;  
  14.         a[2]=a[1].add(a[0].add(a[0]));  
  15.         for(int i=3;i<=250;i++)  
  16.         {  
  17.             a[i]=a[i-1].add(a[i-2].add(a[i-2]));  
  18.         }  
  19.         Scanner cin = new Scanner(System.in); //输入打开  
  20.           
  21.         while(cin.hasNext())//判断是否文件结束  
  22.         {  
  23.             int n=cin.nextInt();  
  24.             System.out.println(a[n]); //输出  
  25.         }  
  26.         cin .close();//输入关闭  
  27.     }  
  28. }   


2、输出:

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. public class Main {  
  2.     public static void main(String[] args)  
  3.     {  
  4.   
  5.         // TODO Auto-generated method stub  
  6.           
  7.         double d;  
  8.           
  9.         d=9999.99999;  
  10.           
  11.         System.out.format("%f",d);                //9999.999990     没有回车  
  12.           
  13.         System.out.format("%10.10f",d).println(); //9999.9999900000 输出回车  
  14.           
  15.         System.out.format("%.4f",d).println();    //10000.0000      输出回车  
  16.           
  17.         System.out.format("%3.4f",d).println();   //10000.0000      输出回车  
  18.           
  19.         System.out.println(d);                    //输出当前变量      输出回车  
  20.           
  21.         System.out.println();                     //                输出回车  
  22.           
  23.         System.out.printf("%f",d);                //9999.999990     没有回车  
  24.           
  25.         System.out.print(d);                      //9999.99999      没有回车  
  26.           
  27.     }  
  28. }  


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

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

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. import java.text.DecimalFormat;  
  2. public class Main {  
  3.     public static void main(String[] args)  {  
  4.         double num = 9.999;  
  5.         DecimalFormat p3 = new DecimalFormat("#.00#");  
  6.         DecimalFormat p4 = new DecimalFormat("#.000#");  
  7.         DecimalFormat p5 = new DecimalFormat("#.0000#");  
  8.         System.out.println(p3.format(num));//输出9.999  
  9.         System.out.println(p4.format(num));//输出9.999  
  10.         System.out.println(p5.format(num));//输出9.9990  
  11.   
  12.           
  13.     }  
  14. }  


3、高精度

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

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

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

下面用BigInteger举个例子:

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. import java.math.BigInteger;  
  2.   
  3. public class Main {  
  4.       
  5.     public static void main(String[] args)  
  6.       
  7.     {  
  8.           
  9.         int a=6,b=3;  
  10.           
  11.         BigInteger x,y,z;  
  12.           
  13.         x=BigInteger.valueOf(a);           //转化赋值  
  14.           
  15.         y=BigInteger.valueOf(b);  
  16.           
  17.         System.out.println(x.add(y));      //加  
  18.           
  19.         System.out.println(x.subtract(y)); //减  
  20.           
  21.         System.out.println(x.multiply(y)); //乘  
  22.           
  23.         System.out.println(x.divide(y));   //除  
  24.           
  25.         System.out.println(x.mod(y));      //取余  
  26.     }  
  27. }  

4、进制转换

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

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. public class Main {  
  2.       
  3.     public static void main(String[] args)  
  4.       
  5.     {  
  6.         String string;  
  7.         int a=8;  
  8.         int x=2;  
  9.         string = Integer.toString(a, x);    //把int型数据转换乘X进制数并转换成string型  
  10.         System.out.println(string);  
  11.           
  12.         int b = Integer.parseInt(string, x);//把字符串当作X进制数转换成int型  
  13.         System.out.println(b);  
  14.     }  
  15. }  

5、字符串

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

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

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. import java.io.*;  
  2. import java.util.*;  
  3. public class Main  
  4. {  
  5.     public static void main(String[] args)   
  6.     {  
  7.         Scanner cin = new Scanner (new BufferedInputStream(System.in));  
  8.         String st = "abcdefg";  
  9.         System.out.println(st.charAt(0)); // st.charAt(i)就相当于st[i].  
  10.         char [] ch;  
  11.         ch = st.toCharArray(); // 字符串转换为字符数组.  
  12.         for (int i = 0; i < ch.length; i++){  
  13.             ch[i] += 1;//字符数组可以像C++   一样操作  
  14.         }  
  15.         System.out.println(ch); // 输入为“bcdefgh”.  
  16.         st = st.substring(1); // 则从第1位开始copy(开头为第0位).  
  17.         System.out.println(st);  
  18.         st=st.substring(24);  //从第2位copy到第4位(不包括第4位)  
  19.         System.out.println(st);//输出“de”  
  20.     }  
  21. }  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/382085.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Codeforces 55D Beautiful Number (数位统计)

把数位dp写成记忆化搜索的形式&#xff0c;方法很赞&#xff0c;代码量少了很多。 下面为转载内容&#xff1a; a positive integer number is beautiful if and only if it is divisible by each of its nonzero digits. 问一个区间内[l,r]有多少个Beautiful数字 范围9*…

埃拉托斯特尼筛法 快速查找素数

埃拉托斯特尼筛法快速查找素数时间限制&#xff1a;1000 ms | 内存限制&#xff1a;65535 KB难度&#xff1a;3描述现在给你一个正整数N&#xff0c;要你快速的找出在2.....N这些数里面所有的素数。输入给出一个正整数数N(N<2000000)但N为0时结束程序。测试数据不超过100组…

教主们:虽然这道题我不会,但Ac还是没问题的。

wywcgs&#xff1a;亦称Lord Wu&#xff0c;俗名吴垠&#xff0c;2009级厦门大学智能科学与技术学院研究生&#xff0c;本科就读于哈尔滨工业大学。因其深厚的算法功底与独到的思维方式&#xff0c;被尊为“吴教主”&#xff0c;至今声威犹存。2006年起参加ACM/ICPC竞赛&#x…

引用 Map 数据结构的排序问题

用过map吧&#xff1f;map提供一个很常用的功能&#xff0c;那就是提供key-value的存储和查找功能。例如&#xff0c;我要记录一个人名和相应的存储&#xff0c;而且随时增加&#xff0c;要快速查找和修改&#xff1a; 岳不群&#xff0d;华山派掌门人&#xff0c;人称君子剑 …

程序猿不能错过的十部电影

不同的行业领域中很多时候都分享着共同的思想和理念。比如&#xff0c;大量的计算机编程中涉及到的概念都被运用到了电影里。有些概念出现在电影里后变得如此之酷&#xff0c;甚至反过来能帮助我们程序员更好的理解这些概念。下面就是小编最喜欢的10大电影&#xff0c;它们都在…

goland远程调试Docker

开发环境 goland windows10 Docker centos IP:123.57.43.91 操作原理及流程 goland通过tcp/8080(应该选取2375&#xff0c;登录阿里云开启这个端口&#xff0c;这里临时采用)端口与docker-host通信&#xff0c; 发送docker指令&#xff0c;然后让linux执行&#xff0c;通过d…

紫书的训练计划——一点点来,坚持到底!

先做 第10章3 数论的一点补充。然后趁热温习 10.1 和10.2 &#xff08;可能会有重的题目&#xff09; &#xff08;期望&#xff0c;概率的题目还要过段时间回来补坑&#xff09;然后 第7、8.1&#xff0c;8.2 章做暴力求解和高效算法&#xff08;可以适当的加快步伐&#…

go设计模式思维导图

go设计模式思维导图

【转载】最短路径之Dijkstra算法详细讲解

&#xff11; 最短路径算法 在日常生活中&#xff0c;我们如果需要常常往返A地区和B地区之间&#xff0c;我们最希望知道的可能是从A地区到B地区间的众多路径中&#xff0c;那一条路径的路途最短。最短路径问题是图论研究中的一个经典算法问题&#xff0c; 旨在寻找图&#xf…

Intelij 添加php注释

没有methodParameters()) groovyScript("def result; def params\"${_1}\".replaceAll([\\\\[|\\\\]|\\\\s], ).split(,).toList(); for(i 0; i < params.size(); i) {result * param params[i] ((i < params.size() - 1) ? \\n:)}; return result…

为什么LeetCode过一段时间又不会了

怎么从这个迷宫的左上角走到右下角&#xff1f; 看起来好像很简单&#xff0c;花时间还是可以找得到答案。 看了答案之后可以很清楚&#xff0c;这是正解。 只有一个问题&#xff1a; 我怎么就没立刻想到&#xff1f; 当在看题解或者听别人讲授思路的时候&#xff0c;你就是…

148. 排序链表

148. 排序链表 给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。 示例 1&#xff1a; 输入&#xff1a;head [4,2,1,3] 输出&#xff1a;[1,2,3,4] 示例 2&#xff1a; 输入&#xff1a;head [-1,5,3,4,0] 输出&#xff1a;[-1,0,3,4,5] 示…

HDU 1874 畅通工程续 (Dijkstra , Floyd , SPFA, Bellman_Ford 四种算法)

畅通工程续 题目链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid1874 Problem Description 某省自从实行了很多年的畅通工程计划后&#xff0c;终于修建了很多路。不过路多了也不好&#xff0c;每次要从一个城镇到另一个城镇时&#xff0c;都有许多种道路方案可以…

vim如何自动补全,ycm配置

vimplus已经很完善了&#xff0c;现在安装已经很容易了。 git clone https://github.com/chxuan/vimplus.git ~/.vimplus cd ~/.vimplus ./install.sh Ubuntu配置vim 更新2018年11月8号 用了一段时间的Ubuntu 18简直太方便了。 三步操作全部配完&#xff01;&#xff01;&a…

Cake -- ACM解决方法

一次生日Party可能有p人或者q人参加,现准备有一个大蛋糕.问最少要将蛋糕切成多少块(每块大小不一定相等),才能使p人或者q人出席的任何一种情况,都能平均将蛋糕分食. Input 每行有两个数p和q. Output 输出最少要将蛋糕切成多少块. Sample Input 2 3 Sample Output 4 …

【转载】ACM中矩阵乘法的应用

copied from 大神s blog 不要以为数学中的矩阵也是黑色屏幕上不断变化的绿色字符。在数学中&#xff0c;一个矩阵说穿了就是一个二维数组。一个n行m列的矩阵可以乘以一个m行p列的矩阵&#xff0c;得到的结果是一个n行p列的矩阵&#xff0c;其中的第i行第j列位置上的数等于前一…

线程控制(一)

1. 线程执行顺序问题 #include <stdio.h> #include <string.h> #include <pthread.h> #include <stdlib.h> #include <unistd.h>void *thread1(void *); void *thread2(void *);pthread_key_t key;void *thread1(void *arg){int a 1, *tsd &a…

C++学习笔记(一)

本文主要内容为C下的输入输出函数以及for循环中的C11新特性。 一、输入输出函数 1. cin cin 遇到 空格、回车、Tab结束输入&#xff0c; 且会将读到的空格、回车、Tab 丢弃&#xff0c;例&#xff1a; #include<iostream> using namespace std;int main(void) {char a…

关于Github的那点事儿

今天突然发现无法从本地git push到远程仓库了&#xff08;然而事实是网有点卡&#xff0c;github官网没更新过来&#xff0c;然而……ssh-key已经删了….&#xff09;&#xff0c;所以又重新添加ssh-key。 ssh-keygen -t rsa cat ~/.ssh/id_rsa.pub 将显示的内容粘贴到github…

Rabbits —— HDU-6227

题意&#xff1a; 有n只兔子在不同的位置&#xff0c;任意一只兔子可以跳到其余任两只兔子&#xff08;必须保证它们中间有空位&#xff09;中间&#xff0c;问最多可移动多少次&#xff1f; 思路&#xff1a; 可看作从任一侧的兔子向中间插空&#xff0c;因此可以将所有兔子…