CSU 1114 平方根大搜索 java大数
1114: 平方根大搜索
Time Limit: 5 Sec Memory Limit: 128 MB
Submit:
49 Solved: 23
[Submit][Status][Web
Board]
Description
Input
输入第一行为数据组数T (T<=20)。以下每行为一组数据,仅包含一个整数n
(2<=n<=1,000,000)和一个长度不超过20的非空01串S。
Output
对于每组数据,输出S的第一次出现中,第一个字符的位置。小数点后的第一个数字的位置为0。输入保证答案不超过100。
Sample Input
2
2 101
1202 110011
Sample Output
2
58
HINT
Source
import java.util.*;
import java.math.*; public class Main { public static void main(String[] args)
{
Scanner cin = new Scanner(System.in);
int T = cin.nextInt();
for(int t=1;t<=T;t++)
{
int num = cin.nextInt();
String str = cin.next(); BigDecimal d = Sqrt(num);//sqrt(num),最多保存150位。
BigInteger x =d.toBigInteger();//取整数部分
d = d.subtract(BigDecimal.valueOf(x.longValue()));//保留小数部分
String hxl = Tostring(d);//将小数部分转化为二进制数字。
int tom = hxl.indexOf(str);//查找第一次出现的位置。
if(tom==-1) tom = 0;
System.out.println(tom);
}
} private static String Tostring(BigDecimal d)
{
/**
* 将小数部分转化为二进制数字。
* 每次乘2,取整数部分就可以。
* 长度最长为150.
* 如果数字太大会超时的。如果数字太小,会不精确。
*/
String tom = new String();
int n = 150;
while(!d.equals(BigDecimal.ZERO)&& (n--)!=0)
{
d = d.multiply(BigDecimal.valueOf(2));
BigInteger x = d.toBigInteger();
tom+=x;
d = d.subtract(BigDecimal.valueOf(x.longValue()));
}
return tom;
} private static BigDecimal Sqrt(int num) {
/***
* 将整数num模拟开根号。
*/
BigDecimal sqrtNum = BigDecimal.valueOf(0);
boolean isFindSqrt = false; int key = (int)Math.sqrt(num*1.0);
sqrtNum = BigDecimal.valueOf(key*1.0);
if(key*key == num) isFindSqrt = true;
if(!isFindSqrt)//不能刚好整除,调用函数,获得精确值。
{
sqrtNum = recuFindSqrt(num,BigDecimal.valueOf(key),
isFindSqrt,BigDecimal.valueOf(1));
}
return sqrtNum;
}
private static BigDecimal recuFindSqrt(int num, BigDecimal sqrtValue,
boolean isFindSqrt, BigDecimal ac) {
/**
* 从每一位开始寻找,从0--9枚举。找最接近的点的方法。
* 暴力。(⊙o⊙)…
*/
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==false)
{
sqrtValue = recuFindSqrt(num, tempSqrt, isFindSqrt, ac);
}
return sqrtValue;
}
}
CSU 1114 平方根大搜索 java大数的更多相关文章
- csu 1114平方根大搜索(JAVA大小数+二分)
1114: 平方根大搜索 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 182 Solved: 96[Submit][Status][Web Boar ...
- csuoj 1114: 平方根大搜索
http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1114 1114: 平方根大搜索 Time Limit: 5 Sec Memory Limit: ...
- 湖南省第八届大学生程序设计大赛原题 D - 平方根大搜索 UVA 12505 - Searching in sqrt(n)
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=30746#problem/D D - 平方根大搜索 UVA12505 - Searchin ...
- 手算平方根和基于 Java BigInteger 的大整数平方根的实现
为了实现任意大数的运算,long用BigInteger替换带哦. 好了废话少数,先说数学原理,也就是手算平方根计算机代码实现!那么什么叫手算平方根了??? 手开方图解 据说前苏联的普通工人都会的(毛熊 ...
- 百度搜索 “Java面试题” 前200页(面试必看)
前言 本文中的题目来源于网上的一篇文章<百度搜索 "Java面试题" 前200页>,但该文章里面只有题目,没有答案.因此,我整理了一些答案发布于本文.本文整理答案的原则 ...
- java大数
java大数还是很好用的! 基本加入: import java.math.BigInteger; import jave.math.BigDecimal; 分别是大数和大浮点数. 首先读入可以用: S ...
- 收藏的一段关于java大数运算的代码
收藏的一段关于java大数运算的代码: package study_02.number; import java.math.BigDecimal; import java.math.BigIntege ...
- Java 大数、高精度模板
介绍: java中用于操作大数的类主要有两个,一个是BigInteger,代表大整数类用于对大整数进行操作,另一个是BigDecimal,代表高精度类,用于对比较大或精度比较高的浮点型数据进行操作.因 ...
- 各大公司java后端开发面试题
各大公司Java后端开发面试题总结 ThreadLocal(线程变量副本)Synchronized实现内存共享,ThreadLocal为每个线程维护一个本地变量.采用空间换时间,它用于线程间的数据隔离 ...
随机推荐
- TTabControl、TMemo组件(制作一个简单的多文本编辑框)
TTabControl包含一列字符串标签的tabs 每个标签控制一个对象 首先创建一个TForm;接下来添加TTabControl组件和一个文件对话框TOpenDialog(用于添加文件),然后在TT ...
- [转] asp.net <%%>&<%#%>&<%=%>&<%@%>&<%$%>用法区别
转自 参考 1.<% %>用来绑定后台代码 如: < % for(int i=0;i<100;i++) { Reaponse.Write(i.ToString()); } % ...
- Python学习总结8:文件模式及操作方法汇总
文件操作之前需要文件保证文件存在,并且将文件open os.mknod("test.txt") 创建空文件 fp = open("test.txt" ...
- android 测试(转)
个人接触android的时间也不是很长,稍微总结下在做Android测试的过程中,初次接触的同学需要些什么准备,以及需要些什么知识?下面讲到的东西可能很多人会觉得很简单,但我确实碰到过有新同学对这些点 ...
- 。。。HibernateTemplate与Session。。。
今天在学习Spring框架的时候,突然发现了这个类----HibernateTemplate,这个类与Session一开始认为是差不多的,这个HibernateTemplate类对象拥有Session ...
- android05
#ANR(application not response) 应用程序无响应原因: >主线程里面执行了耗时的操作.就会导致应用程序无响应. <自己动手写操作系统> 带界面的应用程序都 ...
- Android 测试Service的生命周期
package com.example.myapp4; import android.support.v7.app.ActionBarActivity; import android.content. ...
- SQL数据库之变量
--学习SQL数据库,变量是必须要掌握的概念,系统变量就是变量中最重要的变量之一,下面是SQL中系统变量的应用实例 use AdventureWorksDW exec sp_addtype 'char ...
- JSP在项目中的路径问题
一.JSP中获得当前应用的相对路径和绝对路径 根目录所对应的绝对路径 : request.getRequestURI() 文件的绝对路径 : application.getRealPath(requ ...
- PDA调用WCF服务引用
在 http://www.cnblogs.com/yiping06993010/archive/2009/11/01/1593912.html 中,的作者提到使用NetCFSvcUtil.exe生成代 ...