大精度问题(java)

来源:互联网 发布:中国网络诗歌网新歌词 编辑:程序博客网 时间:2024/06/10 01:17

今天对大数问题进行了一次复习,简直停不下来啊,大精度也属于大数的范畴,对大精度也复习了一遍,以前用c语言编写大精度感觉好麻烦,也不是很好理解,用java感觉就是走了一条捷径,大数问题用的是BigInteger大精度用的是BigDecimal 类,就在nyist做了两个题,学习了一下这两个类的基本用法。

高精度幂

题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=155

 

package com.nyist;import java.math.BigDecimal;import java.util.Scanner;public class nyist155 {public static void main(String[] args) {Scanner scanf=new Scanner(System.in);while(scanf.hasNext()){BigDecimal sum=scanf.nextBigDecimal();int n=scanf.nextInt();String res=sum.pow(n).stripTrailingZeros().toPlainString();//整数去掉小数点和后面的0if(res.startsWith("0")) //去掉前导0 {res=res.substring(1);}System.out.println(res);  }}}/*public BigDecimal pow(int n)返回其值为 (thisn) 的 BigDecimal,准确计算该幂,使其具有无限精度。 参数 n 必须在 0 到 999999999(包括)之间。ZERO.pow(0) 返回 ONE。 注意,未来版本可能会扩展此方法允许的指数范围。 参数:n - 此 BigDecimal 的幂。 返回:thisn 抛出: ArithmeticException - 如果 n 超出范围。*//*stripTrailingZerospublic BigDecimal stripTrailingZeros()返回数值上等于此小数,但从该表示形式移除所有尾部零的 BigDecimal。例如,从 BigDecimal 值 600.0 中移除尾部零,该值具有的 [BigInteger, scale] 组件等于 [6000, 1],使用 [BigInteger, scale] 组件生成的 6E2 等于 [6, -2] 返回:数值上等于移除所有尾部零的 BigDecimal。*//*toPlainStringpublic String toPlainString()返回不带指数字段的此 BigDecimal 的字符串表示形式。对于具有正标度的值,小数点右边的数字个数用于指示标度。对于具有零或负标度的值,生成得到的字符串,好像将该值转换为在数值上等于具有零标度的值一样,并且好像零标度值的所有尾部零都出现在该结果中。 如果非标度值小于零,则整个字符串以减号 '-' ('\u002D') 为前缀。如果非标度值为零或正数,则没有任何符号字符作为前缀。 注意,如果将此方法的结果传递到 string constructor,则只需要恢复此 BigDecimal 的数值;新的 BigDecimal 的表示形式可以有不同的标度。尤其是,如果此 BigDecimal 具有负标度,则在由字符串构造方法进行处理时,此方法产生的字符串将具有零标度。 (此方法的作用类似于 1.4 和更早版本中的 toString 方法。) 返回:不带指数字段的此 BigDecimal 的字符串表示形式。*/

记得这个题以前在poj上看过,当时也卡了好久,最后还是请教了别人,用c语言写的,记得代码好长,差不多有100多行,今天重新用java做了一下,才不到20行的代码就解决啦~ 

A-B Problem

时间限制:1000 ms  |  内存限制:65535 KB
难度:3
描述

A+B问题早已经被大家所熟知了,是不是很无聊呢?现在大家来做一下A-B吧。

现在有两个实数A和B,聪明的你,能不能判断出A-B的值是否等于0呢?

输入
有多组测试数据。每组数据包括两行,分别代表A和B。
它们的位数小于100,且每个数字前中可能包含+,- 号。
每个数字前面和后面都可能有多余的0。
每组测试数据后有一空行。
输出
对于每组数据,输出一行。
如果A-B=0,输出YES,否则输出NO。
样例输入
111.02.0
样例输出
YESNO
来源
hdu改编
上传者
ACM_丁国强


这道题也是大精度的比较基础的题,简单水过;

package com.nyist;import java.math.BigDecimal;import java.util.Scanner;public class nyist524 {public static void main(String[] args) {Scanner scanf=new Scanner(System.in);BigDecimal a,b,c;while(scanf.hasNext()){a=scanf.nextBigDecimal();b=scanf.nextBigDecimal();c=a.subtract(b);if(c.compareTo(BigDecimal.ZERO)==0){System.out.println("YES");}elseSystem.out.println("NO");}}}/*subtractpublic BigDecimal subtract(BigDecimal subtrahend)返回一个 BigDecimal,其值为 (this - subtrahend),其标度为 max(this.scale(), subtrahend.scale())。 参数:subtrahend - 从此 BigDecimal 减去的值。 返回:this - subtrahend*//*compareTopublic int compareTo(BigDecimal val)将此 BigDecimal 与指定的 BigDecimal 比较。根据此方法,值相等但具有不同标度的两个 BigDecimal 对象(如,2.0 和 2.00)被认为是相等的。相对六个 boolean 比较运算符 (<, ==, >, >=, !=, <=) 中每一个运算符的各个方法,优先提供此方法。建议使用以下语句执行上述比较:(x.compareTo(y) <op> 0),其中 <op> 是六个比较运算符之一。 指定者:接口 Comparable<BigDecimal> 中的 compareTo参数:val - 将此 BigDecimal 与之比较的 BigDecimal。 返回:当此 BigDecimal 在数字上小于、等于或大于 val 时,返回 -1、0 或 1。*/

学习还是不断的积累,对这些类和方法的使用,只有多用才会熟练!!

nyist 513 http://acm.nyist.net/JudgeOnline/problem.php?pid=513

今天又在南阳上做了几个大数有关的题;

package com.nyist;import java.math.BigDecimal;import java.util.Scanner;public class nyist513 {public static void main(String[] args) {Scanner cin=new Scanner(System.in);    BigDecimal a,b,sum;    while(cin.hasNext())    {       a=cin.nextBigDecimal();       b=cin.nextBigDecimal();       sum=a.add(b);       if(sum.compareTo(BigDecimal.ZERO)==0)//这个题主要是这里容易wa啊!要判断是否就是0的这种情况       System.out.println(0);       else       System.out.println(sum.stripTrailingZeros().toPlainString());    }}}/*stripTrailingZerospublic BigDecimal stripTrailingZeros()返回数值上等于此小数,但从该表示形式移除所有尾部零的 BigDecimal。例如,从 BigDecimal 值 600.0 中移除尾部零,该值具有的 [BigInteger, scale] 组件等于 [6000, 1],使用 [BigInteger, scale] 组件生成的 6E2 等于 [6, -2] 返回:数值上等于移除所有尾部零的 BigDecimal。*//*compareTopublic int compareTo(BigDecimal val)将此 BigDecimal 与指定的 BigDecimal 比较。根据此方法,值相等但具有不同标度的两个 BigDecimal 对象(如,2.0 和 2.00)被认为是相等的。相对六个 boolean 比较运算符 (<, ==, >, >=, !=, <=) 中每一个运算符的各个方法,优先提供此方法。建议使用以下语句执行上述比较:(x.compareTo(y) <op> 0),其中 <op> 是六个比较运算符之一。 指定者:接口 Comparable<BigDecimal> 中的 compareTo参数:val - 将此 BigDecimal 与之比较的 BigDecimal。 返回:当此 BigDecimal 在数字上小于、等于或大于 val 时,返回 -1、0 或 1。*/

这道题目有点略坑啊,开始做的时候wa的好几次,java中处理后面的0还是很好用的,这道题中间还要判断是否输入0的这种特殊情况,添上那段代码就果断ac啦~用java做大数题就是在刷水题啊~





2 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 胳膊受了风发麻怎么办 胳膊抻筋了很疼怎么办 腰抻了怎么办最有效 孩子胳膊抻着了怎么办 胳膊伤筋了疼怎么办 宝宝胳膊抻了疼怎么办 练完普拉提头晕怎么办 生完孩子腰背疼怎么办 宝宝不肯把屎尿怎么办 存的电话删除了怎么办 脚踝的韧带断了怎么办 买了双鞋子想退怎么办 鞋子大了一码怎么办 nba篮球大师身体素质满了怎么办 钉鞋大了一码怎么办 篮球鞋鞋垫会向里面跑怎么办 穿高跟鞋脚肿了怎么办 衣服弄到单车油怎么办 高低床孩子摔下来怎么办 量血压时老紧张怎么办 牛仔外套的扣子掉了怎么办 裤子的裤筒大了怎么办 衣服拉链驰坏了怎么办 小脚裤裤腿紧了怎么办 地垫粘地板了怎么办 棉麻衬衣皱了怎么办 麻料衣服烫皱了怎么办 在京东买一双奥康鞋没有防伪怎么办 足球鞋丁掉了一颗怎么办 鼻子有点大想变小该怎么办 阿勒泰小东沟风景区边防证怎么办 孩子上一年级了学习很差怎么办 孩子作息时间不规律怎么办 冬天冻脸怎么办小妙招 冬天冻脚怎么办小妙招 冬天脚冷怎么办小妙招 初中生不爱学习父母该怎么办 早孕办公室买新办公桌怎么办 一年级学生专注度差怎么办 pscs6界面字体太小怎么办 psd文件打不开程序错误怎么办