求高精度幂 java_JAVA高精度_求高精度幂
要想用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课程的时候回来继续补充
3.startsWith()方法:
if(a.startsWith(b))
//判断字符串a 是不是以字符串b开头.
if(a.endsWith(b))
//判断字符串a 是不是以字符串b结尾.
startsWith方法测试此字符串从指定索引开始的子字符串是否以指定前缀开始
语法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;
public String substring(int beginIndex, int endIndex)
第一个int为开始的索引,对应String数字中的开始位置,
第二个是截止的索引位置,对应String中的结束位置
1、取得的字符串长度为:endIndex - beginIndex;
2、从beginIndex开始取,到endIndex结束,从0开始数,其中不包括endIndex位置的字符
如:
"hamburger".substring(4, 8) returns "urge"
"smiles".substring(1, 5) returns "mile"
取长度大于等于3的字符串a的后三个子字符串,只需a.subString(a.length()-3, a.length());
再附上经典的一个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(); //整数去掉小数点和后面的0
if(res.startsWith("0")) //去掉前导0
{
res = res.substring(1);
}
System.out.println(res);
}
}
}
这道题奇怪的就是前导0,如果是0.几几几,前面的第一个0也要去掉,整数位直接不要了,所以就用substring截取小数点和小数点之后的。去掉后导0和展开表示(不用科学计数表示)用stripTrailingZeros().toPlainString()就行了。
求高精度幂 java_JAVA高精度_求高精度幂相关推荐
- labview求n阶乘的和_求极限方法总结
函数的极限 第一步:判断极限类型 1. 型 常用方法:①洛必达法则 ②等价无穷小代换 ③泰勒公式 2. 型 常用方法:①洛必达法则 ②分子分母同除以分子和分母各项中最高阶的无穷大 ③基本极限: 当n= ...
- java求乘法逆元的代码_求乘法逆元的几种方法
(数学渣,下面的文字可能有误,欢迎指教) 乘法逆元的定义貌似是基于群给出的,比较简单地理解,可以说是倒数的概念的推广.记a的关于模p的逆元为a^-1,则a^-1满足aa^-1≡ 1(mod p) 加减 ...
- mysql中如何求字段的个数字_求高手帮小弟解决一下!关于mysql字段中数字提取求和的问题?...
例如表1中的No字段是字符串类型,no字段中包含数字及符号,如20+1.5,8+5+4等 那么有办帮法提取出20,1.5,8,5,4这些数字来进行求和等于38.5吗?语句怎么样写? 解决方案 30 提 ...
- python求抛物线和直线面积_求抛物线与直线形成的面积(数学)
应该是求定积分的 但是还没研究很透怎么用定积分实现 就找了一个公式 s = -(y2-y1)/pow(x2-x1, 2)*pow(x3-x2, 3)/6 以下是Discuss中的详细分析: 设直线方 ...
- python求合数的所有因子_求合数的所有素因子
求合数的所有素因子 唯一分解定理 对正整数N,存在唯一的排列\(\{p_1,p_2,....\}\)使得\(N = \{p_1^{e_1}*p_2^{e_2}*...*p_k^{e_k}\}\) 其中 ...
- python求一个数的因子_求一个整数的所有素数因子的思路是什么?
用筛法. 我们仅考虑分解奇数.(原因?) 现在我们可以假设n=pq,pq必可写作(x+y)(x-y) 也即我们需要找到 x²≡y² (mod n) 我们可以考虑,在 kn 附近的完全平方数 x² 中, ...
- 逆幂律模型_思维模型18 - 幂律分布是什么?
上篇关于正态分布的内容中提到了自然界中许多事物的概率分布都近似的符合正态分布,后来我们拿大多数人最关心的财富来举例,但它符合正态分布符合对数正态分布,这是以人数做统计,但如果按照各个资产量统计人数的话 ...
- C语言_求1到某个数之间的所有素数
C语言_求1到某个数之间的所有素数 程序目的 设计思路 具体实现 程序目的 键盘输入一个数n,求出从1到n之间的所有素数并输出. 设计思路 考虑到代码的复用性,先要写出一个判断素数的函数. 具体实现 ...
- c语言高精度加减法程序,C语言实现高精度加减法
本文实例为大家分享了C语言实现高精度加减法的具体代码,供大家参考,具体内容如下 首先,我们来看一下C语言中各类型的最值: unsigned int 0-4294967295 int -21474836 ...
- C++_求2个或3个正整数中的最大数,用带有默认参数的函数实现
C++_求2个或3个正整数中的最大数,用带有默认参数的函数实现 #include<iostream> using namespace std; /*** 求2个或3个正整数中的最大数,用带 ...
最新文章
- 使用python爬取教程生成PDF
- php下字符与二进制互转函数,PHP 字符串与二进制互转
- FD.io VPP startup.conf配置文件示例:安装后第一次配置
- linux有个进程有问题_第五十五章、linux下进程的基本知识
- 设置表格单元格的背景颜色
- IDEA 自定义注释
- Electron入门宝典(三)菜单快捷键
- adb 备份和还原apk应用数据
- 终身成长----“成长型思维”
- 计算机在军事方面的应用
- vue脚手架安装报错,终极方法
- mysql分区 alter_mysql分区表设计(一)
- mac笔记本当做服务器记录
- 让你在ManjaroLinux下也能只用你喜欢的中文输入法
- html前端学习三:CSS
- 服务器i620-g15用什么型号内存,定位不同领域 曙光I620-G15服务器评测
- 原来脑残一词是李时珍发明的,本草纲目中就有”脑残者无药医也“
- 推荐10个不错的React开源项目
- 一分赛车程序制作 mysql主从配置
- Java大作业-考试管理系统(GUI)无数据库-Java课程设计