摘要

题目链接 难度等级 完成状态 完成分数 最后编辑时间 失误原因(初次提交分数)
Very simple problem ★☆☆☆☆ 答案正确 100 2015-2-18 00:59:55 表示错误(3)

(AC 1817)

题意

高精度开方。

题解

这一题和CodeVS/3119是相同的,可是那题的代码莫名其妙PE了……我也不造为什么,也许是io流的问题,不想研究了。不过,高精度神魔的听说java有大整数/小数类,于是顺手开了个java的小坑。之前配置过Android环境了,环境也就不多提了。入个门,写个二分的高精度开方也不算太难的事了。

Java的a+b程序

先来个sgu官方java的a+b

显示/移除行号
  1. //引用相关库//
  2. import java.util.*;
  3. import java.io.*;
  4. //主程序类:Solution//
  5. public class Solution
  6. {
  7. //主程序,参数是String[] arg//
  8. public static void main (String[] argv) throws IOException
  9. {
  10. //创建一个类似于cin的流//
  11. BufferedReader cin = new BufferedReader(new InputStreamReader(System.in));
  12. //读入一行//
  13. StringTokenizer st = new StringTokenizer(cin.readLine());
  14. //从一行中解析//
  15. int a = Integer.parseInt(st.nextToken());
  16. int b = Integer.parseInt(st.nextToken());
  17. int c = a + b;
  18. //输出//
  19. System.out.println(c);
  20. }
  21. }

Java的输入输出

首先先调教输入输出,java中输出常见有几种:

显示/移除行号
  1. System.out.print(); //cout<<...;//
  2. System.out.println(); //cout<<...<<endl;//
  3. System.out.printf(); //printf(...);注意换行用%n表示//


输入先要创建一个流:

显示/移除行号
  1. Scanner cin = new Scanner(System.in);

或者

显示/移除行号
  1. Scanner cin = new Scanner(new BufferedInputStream(System.in));//据说会更快一点//


然后进行输入:

显示/移除行号
  1. 变量=cin.next类型名();

显示/移除行号
  1. a=cin.nextInt();

但是听说这种cin就和C++的cin一样容易超时,如果想要快应该用StreamTokenizer和PrintWriter,不过由于我只是用用高精度就无所谓这个了,有兴趣请阅读http://blog.csdn.net/mingchaoyan/article/details/6301858。

Java的数据类型

常见的有:int,double,boolean,String,BigDecimal(高精度浮点数),BigInteger(高精度整数),注意区分大小写。

Java的高精度和进制转换

居然没有重载运算符,差评!

用法大概这几种:

显示/移除行号
  1. c=a.add(b);//c=a+b;//
  2. c=a.subtract(b);//c=a-b;//
  3. c=a.multiply(b);//c=a*b;//
  4. c=a.divide(b);//c=a/b;//
  5. c=a.mod(b);//c=a%b;//
  6. a.compareTo(b);//a和b:相等返回0,小于返回-1,大于返回1//
  7. c=a.pow(n);//c=a^n;//
  8. str=a.toString();//对应十进制字符串//
  9. str=a.toString(n);//对应n进制字符串//
  10. a=valueOf(n);//a=(int)n;//
  11. c=a.gcd(b);//abs(a)和abs(b)的最大公约数//
  12. c=a.abs();//c=abs(a);//
  13. i=a.hashCode();//a的哈希码//
  14. p=a.isProbablePrime(int certainty);//是否可能为素数(估计)//
  15. c=a.nextProbablePrime();//大于a的可能为素数的第一个整数//
  16. p=a.signum();//正负号函数//
  17. c=BigInteger.ZERO;//c=0;//
  18. c=BigInteger.ONE;//c=1;//
  19. c=BigInteger.TEN;//c=10;//
  20. c=new BigInteger(st, base);//通过base进制的字符串st构造高精度整数//
  21. st=Integer.toString(num, base);//把10进制的数num转成base进制的st(base <= 35)//
  22. i=Integer.parseInt(st, base); //把base进制的st,转成10进制的int//

代码

111.java代码已折叠
展开折叠内容
显示/移除行号
  1. import java.io.*;
  2. import java.math.BigInteger;
  3. import java.util.*;
  4. public class Solution{
  5. public static void main(String[] args) {
  6. Scanner cin = new Scanner(new BufferedInputStream(System.in));
  7. BigInteger N, l, r, mid;
  8. N = cin.nextBigInteger();
  9. l = BigInteger.ZERO;
  10. r = N.abs().add(BigInteger.ONE);
  11. while (l.compareTo(r) <= 0) {
  12. mid = l.add(r).divide(BigInteger.valueOf(2));
  13. if (mid.multiply(mid).compareTo(N) >= 0)
  14. r = mid.subtract(BigInteger.ONE);
  15. else
  16. l = mid.add(BigInteger.ONE);
  17. }
  18. while (l.multiply(l).compareTo(N) > 0) {
  19. l = l.subtract(BigInteger.ONE);
  20. }
  21. System.out.println(l);
  22. }
  23. }

参考资料和拓展阅读

著作权声明[编辑]

关于[编辑]