湖南省第八届大学生程序设计大赛原题 D - 平方根大搜索 UVA 12505 - Searching in sqrt(n)...
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=30746#problem/D
D - 平方根大搜索
UVA12505 - Searching in sqrt(n)
解题思路:求出n的平方根,去整数,化二进制,字符串子串查找。
基本思路简单,但是求平方根那里,不能直接用库函数方法,因为Math.sqrt()返回值的精度比较小。我们这里要用到的精度最高是140位。所以,求平方根的函数(中心代码转自http://blog.csdn.net/nujiah001/article/details/6657422)要自己写。不单只是自己写,由于设计的精度过高,一般的数据类型(如double)无法存储。所以必须用到JAVA中的大数类import java.math.BigDecimal;。
1545839 | 20114045007 | D | Accepted | 125440 KB | 5044 ms | Java | 2593 B | 2013-09-09 14:35:32 |
import java.util.*;
import java.math.*;
public class Main{static String tob(BigDecimal d) //求小数d的二进制表示,返回二进制存储串s{String s=new String();int n=150;while(!d.equals(BigDecimal.ZERO)&&n--!=0){d=d.multiply(BigDecimal.valueOf(2));BigInteger x=d.toBigInteger();s+=x;d=d.subtract(BigDecimal.valueOf(x.longValue()));}return s;}public static BigDecimal culsqrt(int num) //以下三个函数(方法)用来求num的平方根{return sqrtMathod(num);}public static BigDecimal sqrtMathod(int num){BigDecimal sqrtNum = BigDecimal.valueOf(-1);boolean isFindSqrt = false;// get int sqrt numdouble tempSqrt = 0;if (num > 0){if (num == 1){return BigDecimal.valueOf(1);}else{for (int j = 0; j <= num / 2 + 1; j++){if (j * j == num){sqrtNum = BigDecimal.valueOf(j);isFindSqrt = true;break;}if (j * j > num){tempSqrt = j - 1;break;}}}}if (!isFindSqrt){sqrtNum = recuFindSqrt(num, BigDecimal.valueOf(tempSqrt), isFindSqrt, BigDecimal.valueOf(1));}return sqrtNum;}private static BigDecimal recuFindSqrt(int num, BigDecimal sqrtValue, boolean isFindSqrt, BigDecimal ac){ac = ac.multiply(BigDecimal.valueOf(10));BigDecimal tempSqrt = BigDecimal.valueOf(0);for (int i = 0; i < 10; i++){tempSqrt = sqrtValue .add(BigDecimal.valueOf(i).divide(ac) );if (tempSqrt .multiply(tempSqrt) .equals(BigDecimal.valueOf(num))){isFindSqrt = true;sqrtValue = tempSqrt;}else if (tempSqrt .multiply(tempSqrt) .compareTo(BigDecimal.valueOf(num))==1){tempSqrt = sqrtValue.add(BigDecimal.valueOf(i - 1) .divide( ac));sqrtValue = tempSqrt;break;}}BigDecimal temp = tempSqrt;if (temp.toString().length() <= 150 && !isFindSqrt){sqrtValue = recuFindSqrt(num, tempSqrt, isFindSqrt, ac);}return sqrtValue;}public static double add(double v1, double v2){BigDecimal b1 = new BigDecimal(Double.toString(v1));BigDecimal b2 = new BigDecimal(Double.toString(v2));return b1.add(b2).doubleValue();}public static void main(String[] args) {Scanner in= new Scanner(System.in);int t;int n;String st;t=in.nextInt();while(t--!=0){n=in.nextInt();st=in.next();BigDecimal d=culsqrt(n); //求平方根BigInteger x=d.toBigInteger();d=d.subtract(BigDecimal.valueOf(x.longValue())); //分离出小数部分String tobs=tob(d); //将小数转化为二进制,存储在串tobs中System.out.println(tobs.indexOf(st)); //输出查找结果}}
}
湖南省第八届大学生程序设计大赛原题 D - 平方根大搜索 UVA 12505 - Searching in sqrt(n)...相关推荐
- 湖南省第六届大学生程序设计大赛原题 F Biggest Number (UVA1182)
Biggest Number http://acm.hust.edu.cn/vjudge/contest/view.action?cid=30851#problem/F 解题思路:DFS(检索)+BF ...
- 2010年湖南省第六届大学生程序设计大赛 F题 “Biggest Number” CSG - 1051 // UVA 11882 (dfs+bfs+剪枝)
题目链接 一.题目内容 一个r行c列的矩阵,里面只有1-9的数字和'#',最开始可以随意挑选一个数字然后可以上下左右移动,问所走的路径所含数字最大为多少. 样例解释 input 3 7 ##9784# ...
- 2019年河南省ACM大学生程序设计竞赛原题
A题:可以用kmp,也可以暴力 B题:动态规划 C题:可以用kmp,也可以暴力 D题:直接求每段的斜率,算出每个点的收益y然后相加即可,22点必定有一趟车 E题:求树的路径有多少个,建树就完了(比赛时 ...
- 2017年“华信智原杯”安徽省大学生程序设计大赛C题-刷票
C. 刷票 题目描述: 有一个选秀比赛,节目组按照观众的投票情况决定选手的去留.为了给旗下 艺人造势,A 公司收买了一批水军来刷票.已知现在有 n 名选手同台竞争,依次 编号 1-n,A 公司的艺人编 ...
- 吉首大学第十届“新星杯”大学生程序设计大赛 A题题解
这是一场很毒瘤的比赛. 鲁大师在一个星期前通知我们去打这场比赛,说名次高的有奖品,还说去年他们去参加这场比赛拿了前几名拿了个U盘-(疯狂暗示比赛很简单比赛很简单 ) 单纯的我真的信了 赛后得知这场比赛 ...
- 重庆市第九届大学生程序设计大赛Day1.题D代码
~~第一天的比赛结束了.比赛期间没勘误出来的题目回寝肝了好久才完成. 回头仔细想想,这么简单的题目,我没AC全是因为各种细节上的处理不到位啊! 果然还是平时练习的太少啦!cay嘤嘤嘤嘤嘤嘤嘤嘤嘤 另: ...
- 怀化学院计算机科学张显老师,怀化学院第十二届大学生计算机程序设计竞赛暨2019年湖南省第十五届大学生程序设计大赛选拔赛完美落幕...
原标题:怀化学院第十二届大学生计算机程序设计竞赛暨2019年湖南省第十五届大学生程序设计大赛选拔赛完美落幕 2019年6月9日,由我校教务处主办,计算机科学与工程学院.怀化学院ACM协会承办的怀化学院 ...
- 怀化学院计算机设计大赛报名系统,怀化学院六十周年校庆第十一届大学生计算机程序设计竞赛暨2018年湖南省第十四届大学生程序设计大赛选拔赛成功举办...
原标题:怀化学院六十周年校庆第十一届大学生计算机程序设计竞赛暨2018年湖南省第十四届大学生程序设计大赛选拔赛成功举办 比赛 信息 1 比赛名称:怀化学院六十周年校庆第十一届大学生计算机程序设计竞赛暨 ...
- 湖南省第八届大学生计算机程序设计竞赛1115: 最短的名字(模拟)
1115: 最短的名字 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 739 Solved: 292 [Submit][Status][Web Boa ...
最新文章
- CPU的制造过程及大致原理
- 大数据互联网架构阶段 Linux下安装mysql启动的常见问题
- 从mysql的官网下载tar.gz结尾的mysql
- Android 5.1 API 22 所有sdk文件下载地址
- 二面京东,面试官直接问我JVM,我心里一阵暗爽~
- java学习(35):巩固练习
- https 方式使用git@osc设置密码的方式
- java jdom追加节点_java-使用xpath和jdom选择一个节点
- c++学习书籍推荐及理由
- java计算出现负数吗,请问一个计算器的有关问题,怎么实现负数计算
- SQL14	从titles表获取按照title进行分组,注意对于重复的emp_no进行忽略。
- c语言scandf用法,scan的用法总结大全
- Libvirt网络管理
- java 正则表达式 单引号_单引号之间的Java正则表达式内容
- 易语言 普通填表 html5,易语言网页填表源码
- 为四川汶川大地震遇难者默哀
- 欧盟委员会将批准微软收购Skype的交易
- 乐趣无穷,用SQL语句给宝宝取名字(用电脑起名)
- 麦可网嵌入式linux,麦可网张凌华体系结构及裸板篇ARM嵌入式开发视频教程
- STM32 低功耗设计
热门文章
- 分布式任务分发框架Gearman测试、性能监控、队列持久化【python 实例】
- Struts2拦截器的使用
- IBM XIV高效存储广受公安、医疗、电信、金融等客户赞誉
- “柔”,“软”,“微”,“弱”何以成为互联网时代的时髦词汇
- [NIO-1]缓冲区
- turtlebot3安装遇到的问题总结
- 容器化部署实践之Django应用部署(二)
- 2019年Java程序员就业分析
- DOS 如何取当前时间做为文件名?
- phpcms的安装以及简单使用