JAVA高精度_求高精度幂
来源:互联网 发布:淘宝卖衣服赚钱吗 编辑:程序博客网 时间:2024/06/07 06:49
首先是题目传送门: NYoj 155 求高精度幂
要想用Java轻快的水过这道题,要先了解下JAVA.math中的几个方法
1.Java.math.BigDecimal.toPlainString() 返回此BigDecimal的字符串表示形式不带指数字段。
例如来个小对比:函数 toPlainString() 和 toString()
对于 BigDecimal b ; (b=(0.4321)^ 20)
String s = b.toPlainString() ;
System.out.println(s) ;
输出为:
0.00000005148554641076956121994511276767154838481760200726351203835429763013462401
若String s = b.toString() ;
输出为:
5.148554641076956121994511276767154838481760200726351203835429763013462401E-8
给一个字符串1.238761976E-10
如何得到0.0000000001238761976这个字符串呢?
BigDecimal bd = new BigDecimal("1.238761976E-10");
System.out.println(bd.toPlainString());
2.java.math.BigDecimal.stripTrailingZeros() 返回一个BigDecimal,它在数值上等于这一个,但表示形式移除所有尾部零。
用一个例子来说明:
有一个特殊情况,就是整数为0的时候:
BigDecimal num=new BigDecimal("0.00").stripTrailingZeros();
System.out.println(num);
输出为0.00
这里面有个组件精度的转换,具体也没搞清楚,后面学Java课程的时候回来继续补充
别人提出的问题:http://bbs.csdn.net/topics/350081635
相关的对此函数方法的解释:http://www.yiibai.com/java/math/bigdecimal_striptrailingzeros.html
3.startsWith()方法:
- if(a.startsWith(b))
- //判断字符串a 是不是以字符串b开头.
- if(a.endsWith(b))
- //判断字符串a 是不是以字符串b结尾.
语法1 public boolean startsWith(String prefix)
返回值:如果参数表示的字符序列是此字符串表示的字符序列的前缀,则返回true;否则返回false。如果参数是空字符串,或者等于此String对象(用equals(Object)方法确定),则返回true。
参数:prefix为指定的前缀。
示例 本示例使用startsWith方法来判断字符串str是否以字符串“like”开始,并将结果赋值给boolean变量b。由于字符串str不是以字符串“like”开始的,因此boolean类型变量b的值为false。
String str = "I like Java"; //定义一个字符串boolean b = str.startsWith("like");System.out.println(b)
语法2 public boolean startsWith(String prefix , int toffset)
返回值:如果参数表示的字符序列是此对象从索引toffset处开始的子字符串,则返回true;否则返回false。如果toffset为负或大于此String对象的长度,则结果为false;否则结果与该表达式的结果相同。
参数:prefix为指定的前缀。
参数:toffset为在字符串中开始查找的位置。
示例 本示例使用startsWith方法来判断前缀“I l”是否是字符串strCom1中开始索引位置是0的字符序列,并将结果赋值给boolean变量strB。由于字符串strCom1中开始索引位置在0的字符序列与指定的前缀“I l”相同,因此对象strB为true。
String strCom1 = "I like Java"; //定义一个字符串boolean strB = strCom1.startsWith("I l",0);System.out.println(strB);
4.String中的subString()方法:
str=str.substring(int beginIndex);截取掉str从首字母起长度为beginIndex的字符串,将剩余字符串赋值给str;
str=str.substring(int beginIndex,int endIndex);截取str中从beginIndex开始至endIndex结束时的字符串,并将其赋值给str;
再附上经典的一个Java字符串处理例子,集合了subString和startsWith,endsWith,indexOf用法
public class StringDemo{ public static void main(String args[]){ String s1="this is my original string"; String sd="original"; if (s1.startsWith(sd)) //startsWith()方法判断字符串s1是否从字符串sd开始 s1=s1.substring(sd.length()); else if(s1.endsWith(sd)) //endWith()方法判断字符串s1是否从字符串sd结尾 s1=s1.substring(0,s1.length()-sd.length()); else { int index=s1.indexOf(sd); //indexOf()搜索字符或子字符串首次出现,这里的index等于11 if(index!=-1) { String s2=s1.substring(0,index); //从字符串s1的首字符开始,取index个字符 String s3=s1.substring(index+sd.length());//取字符串s1的第19个字符后面的字符串 s1=s2+s3; } else System.out.println("string /""+sd+"/" not found"); } System.out.println(s1); }}
OK,弄懂上面的,这道题就能很快写出来了:
import java.math.BigInteger;import java.util.Scanner;import java.math.BigDecimal;public class Main{public static void main(String args[]){Scanner in = new Scanner(System.in);while(in.hasNext()){BigDecimal ans = in.nextBigDecimal();int n = in.nextInt();String res = ans.pow(n).stripTrailingZeros().toPlainString(); //整数去掉小数点和后面的0if(res.startsWith("0")) //去掉前导0{res = res.substring(1);}System.out.println(res);}}}
这道题奇怪的就是前导0,如果是0.几几几,前面的第一个0也要去掉,整数位直接不要了,所以就用substring截取小数点和小数点之后的。去掉后导0和展开表示(不用科学计数表示)用stripTrailingZeros().toPlainString()就行了。
- JAVA高精度_求高精度幂
- POJ 1001 求高精度幂【JAVA】
- Nyoj-155 求高精度幂 (java实现
- POJ 1001 Java:求高精度幂
- NYOJ 155 求高精度幂(java)
- 求高精度幂
- 高精度求幂运算
- 求高精度幂
- 求高精度幂
- POJ1001 求高精度幂
- NYOJ - 求高精度幂
- NYOJ155-求高精度幂
- 求高精度幂
- 求高精度幂
- 【高精度求幂】
- 求高精度幂 POJ1001
- NYOJ155 求高精度幂
- 求高精度幂
- Flink相关文章索引(1)
- Facebook Hacker Cup 2016 Qualification Round Text Editor
- 基本引用类型和对象引用类型区别
- 洛谷 1125——笨小猴(简单的模拟)
- webpack 部署以及分离第三方库
- JAVA高精度_求高精度幂
- 洛谷 1056——排座椅(简单的模拟)
- leetcode 27. Remove Element
- NSCache小结
- RabbitMq相关文章索引(1)
- 洛谷 1216——USACO 1.5 数字金字塔(递推与递归二分)
- Python 2 和 Python 3版本切换的一些问题
- SVN学习1
- leetcode 2. Add Two Numbers