关于用户网站建设的论文,wordpress 表单 入库,开发网站公司,义乌网站建设推广专家题目地址#xff1a;http://lx.lanqiao.org/problem.page?gpidT126 这道题强烈建议用java做#xff0c;毕竟自带BigInteger类。 此题看似是一道模拟题#xff0c;但由于数据规模很大#xff08;10的1000次方#xff09;#xff0c;只能找规律。规律是最终结果为sqrt(n)*…题目地址http://lx.lanqiao.org/problem.page?gpidT126 这道题强烈建议用java做毕竟自带BigInteger类。 此题看似是一道模拟题但由于数据规模很大10的1000次方只能找规律。规律是最终结果为sqrt(n)*sqrt(m)然后此题就成了大数开根的题。 做法是先对数字的长度进行判断如果被开根的数是偶数位的例如43654位开根后就为其原位数的一半662位。如果其位数是奇数位的例如1213位开根后其位数就是原位数的二分之一向下区整再加一113/212位。 确定了位数之后就对其进行由高位至低位由小到大的遍历。 以4356为例先确定答案是两位的初始化为00从十位开始1-9的遍历到70的时候该数的平方为49004356从而确定十位是7-16。个位同理。 本程序有多次char[], String, BigIntger之间的转化要正确转化。 1 import java.math.BigInteger;2 import java.util.Arrays;3 import java.util.Scanner;4 5 public class Main {6 7 public static void main(String[] args) {8 // TODO Auto-generated method stub9 Scanner cin new Scanner(System.in);
10 String s1 cin.next();
11 String s2 cin.next();
12 BigInteger ans1 BigSqrt(s1);
13 BigInteger ans2 BigSqrt(s2);
14 //System.out.println(ans1 ans2);
15 BigInteger ans ans1.multiply(ans2);
16 System.out.println(ans);
17 }
18
19 private static BigInteger BigSqrt(String s) {
20 int mlen s.length(); //被开方数的长度
21 int len; //开方后的长度
22 BigInteger beSqrtNum new BigInteger(s);//被开方数
23 BigInteger sqrtOfNum; //存储开方后的数
24 BigInteger sqrtOfNumMul; //开方数的平方
25 String sString;//存储sArray转化后的字符串
26 if(mlen%2 0) len mlen/2;
27 else len mlen/21;
28 char[] sArray new char[len];
29 Arrays.fill(sArray, 0);//开方数初始化为0
30 for(int pos0; poslen; pos){
31 //从最高开始遍历数组每一位都转化为开方数平方后刚好不大于被开方数的程度
32 for(char num1; num9; num){
33 sArray[pos] num;
34 sString String.valueOf(sArray);
35 sqrtOfNum new BigInteger(sString);
36 sqrtOfNumMul sqrtOfNum.multiply(sqrtOfNum);
37 if(sqrtOfNumMul.compareTo(beSqrtNum) 1){
38 sArray[pos]-1;
39 break;
40 }
41 }
42 }
43 return new BigInteger(String.valueOf(sArray));
44 }
45 } 转载于:https://www.cnblogs.com/mycd/p/5414127.html