题意:给定n,对n开根号得到k,问字符串s在k的小数部分中第一次出现的位置
思路分析:暴力,每次分析小数点之后的那一位,假设是1,然后平方之后和n比较大小,从而确定该位是多少,找到
120位之后就终止。精度要求比较高,所以用java写。
代码如下:
import java.math.*;
import java.util.*;
import java.io.*;
public class MAIN {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int t = cin.nextInt();
while(t-- > 0)
{
int n = cin.nextInt();
String s = cin.next();//java申请局部变量一定要初始化
int k = (int)Math.sqrt(1.0*n);
BigDecimal n1 = BigDecimal.valueOf(n);
BigDecimal k1 = BigDecimal.valueOf(k);
BigDecimal temp = BigDecimal.valueOf(0.5);
StringBuffer str = new StringBuffer();
for(int i = 0; i < 130; i++)
{
BigDecimal k2 = k1.add(temp);
if(n1.compareTo(k2.pow(2)) >= 0)
{
str.append('1');
k1 = k1.add(temp);
}
else str.append('0');
temp = temp.multiply(BigDecimal.valueOf(0.5));
}
int p = str.toString().indexOf(s);
System.out.println(p);
}
}
}