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)...相关推荐

  1. 湖南省第六届大学生程序设计大赛原题 F Biggest Number (UVA1182)

    Biggest Number http://acm.hust.edu.cn/vjudge/contest/view.action?cid=30851#problem/F 解题思路:DFS(检索)+BF ...

  2. 2010年湖南省第六届大学生程序设计大赛 F题 “Biggest Number” CSG - 1051 // UVA 11882 (dfs+bfs+剪枝)

    题目链接 一.题目内容 一个r行c列的矩阵,里面只有1-9的数字和'#',最开始可以随意挑选一个数字然后可以上下左右移动,问所走的路径所含数字最大为多少. 样例解释 input 3 7 ##9784# ...

  3. 2019年河南省ACM大学生程序设计竞赛原题

    A题:可以用kmp,也可以暴力 B题:动态规划 C题:可以用kmp,也可以暴力 D题:直接求每段的斜率,算出每个点的收益y然后相加即可,22点必定有一趟车 E题:求树的路径有多少个,建树就完了(比赛时 ...

  4. 2017年“华信智原杯”安徽省大学生程序设计大赛C题-刷票

    C. 刷票 题目描述: 有一个选秀比赛,节目组按照观众的投票情况决定选手的去留.为了给旗下 艺人造势,A 公司收买了一批水军来刷票.已知现在有 n 名选手同台竞争,依次 编号 1-n,A 公司的艺人编 ...

  5. 吉首大学第十届“新星杯”大学生程序设计大赛 A题题解

    这是一场很毒瘤的比赛. 鲁大师在一个星期前通知我们去打这场比赛,说名次高的有奖品,还说去年他们去参加这场比赛拿了前几名拿了个U盘-(疯狂暗示比赛很简单比赛很简单 ) 单纯的我真的信了 赛后得知这场比赛 ...

  6. 重庆市第九届大学生程序设计大赛Day1.题D代码

    ~~第一天的比赛结束了.比赛期间没勘误出来的题目回寝肝了好久才完成. 回头仔细想想,这么简单的题目,我没AC全是因为各种细节上的处理不到位啊! 果然还是平时练习的太少啦!cay嘤嘤嘤嘤嘤嘤嘤嘤嘤 另: ...

  7. 怀化学院计算机科学张显老师,怀化学院第十二届大学生计算机程序设计竞赛暨2019年湖南省第十五届大学生程序设计大赛选拔赛完美落幕...

    原标题:怀化学院第十二届大学生计算机程序设计竞赛暨2019年湖南省第十五届大学生程序设计大赛选拔赛完美落幕 2019年6月9日,由我校教务处主办,计算机科学与工程学院.怀化学院ACM协会承办的怀化学院 ...

  8. 怀化学院计算机设计大赛报名系统,怀化学院六十周年校庆第十一届大学生计算机程序设计竞赛暨2018年湖南省第十四届大学生程序设计大赛选拔赛成功举办...

    原标题:怀化学院六十周年校庆第十一届大学生计算机程序设计竞赛暨2018年湖南省第十四届大学生程序设计大赛选拔赛成功举办 比赛 信息 1 比赛名称:怀化学院六十周年校庆第十一届大学生计算机程序设计竞赛暨 ...

  9. 湖南省第八届大学生计算机程序设计竞赛1115: 最短的名字(模拟)

    1115: 最短的名字 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 739  Solved: 292 [Submit][Status][Web Boa ...

最新文章

  1. CPU的制造过程及大致原理
  2. 大数据互联网架构阶段 Linux下安装mysql启动的常见问题
  3. 从mysql的官网下载tar.gz结尾的mysql
  4. Android 5.1 API 22 所有sdk文件下载地址
  5. 二面京东,面试官直接问我JVM,我心里一阵暗爽~
  6. java学习(35):巩固练习
  7. https 方式使用git@osc设置密码的方式
  8. java jdom追加节点_java-使用xpath和jdom选择一个节点
  9. c++学习书籍推荐及理由
  10. java计算出现负数吗,请问一个计算器的有关问题,怎么实现负数计算
  11. SQL14 从titles表获取按照title进行分组,注意对于重复的emp_no进行忽略。
  12. c语言scandf用法,scan的用法总结大全
  13. Libvirt网络管理
  14. java 正则表达式 单引号_单引号之间的Java正则表达式内容
  15. 易语言 普通填表 html5,易语言网页填表源码
  16. 为四川汶川大地震遇难者默哀
  17. 欧盟委员会将批准微软收购Skype的交易
  18. 乐趣无穷,用SQL语句给宝宝取名字(用电脑起名)
  19. 麦可网嵌入式linux,麦可网张凌华体系结构及裸板篇ARM嵌入式开发视频教程
  20. STM32 低功耗设计

热门文章

  1. 分布式任务分发框架Gearman测试、性能监控、队列持久化【python 实例】
  2. Struts2拦截器的使用
  3. IBM XIV高效存储广受公安、医疗、电信、金融等客户赞誉
  4. “柔”,“软”,“微”,“弱”何以成为互联网时代的时髦词汇
  5. [NIO-1]缓冲区
  6. turtlebot3安装遇到的问题总结
  7. 容器化部署实践之Django应用部署(二)
  8. 2019年Java程序员就业分析
  9. DOS 如何取当前时间做为文件名?
  10. phpcms的安装以及简单使用