hihoCoder 二进制小数 BigDecimal类
来源:互联网 发布:淘宝开店需要的csv 编辑:程序博客网 时间:2024/06/05 14:23
题目地址:http://hihocoder.com/contest/hiho157/problem/1
时间限制:10000ms
单点时限:1000ms
内存限制:256MB
描述
给定一个十进制小数X,判断X的二进制表示是否是有限确定的。
例如0.5的二进制表示是0.1,0.75的二进制表示是0.11,0.3没有确定有限的二进制表示。
输入
第一行包含一个整数 T (1 ≤ T ≤ 10),表示测试数据的组数。
以下T行每行包含一个十进制小数 X (0 < X < 1)。 X一定是以”0.”开头,小数部分不超过100位。
输出
对于每组输入,输出 X 的二进制表示或者NO(如果 X 没有确定有限的二进制表示)。
样例输入
3
0.5
0.75
0.3
样例输出
0.1
0.11
NO
Java 代码如下:
import java.math.BigDecimal;import java.util.Scanner;public class Main { public static void main(String[] args) { // TODO Auto-generated method stub Scanner in=new Scanner(System.in); BigDecimal one=new BigDecimal("1"); int t; t=in.nextInt(); for(int i=0;i<t;i++){ BigDecimal bd=new BigDecimal(in.next()); String s=bd.toString(); String bina="0."; int flag=0; for(int j=1;j<=s.length()-2;j++){ bd=bd.add(bd); //乘2 switch (bd.compareTo(one)) { case 1: //大于1 bd=bd.add(one.negate()); //-1 bina+="1"; break; case 0://等于1,返回 bd=bd.add(one.negate()); bina+="1"; flag=1; break; case -1://小于1 bina+="0"; break; } if(flag==1){ break; } } if(bd.compareTo(new BigDecimal("0"))==0){ System.out.println(bina); } else{ System.out.println("NO"); } } }}
思路:用Java 的BigDecimal类存数,模拟笔算过程 : 不断乘2,如果大于1,二进制数后面就添“1”再减1,否则添“0”。对于n位的小数,如果乘了n次2,结果还不是1,那就不能用确定有限的二进制数表示。
顺便总结一下常用BigDecimal类的函数:
a.negate() -a,求相反数,返回值是BigDecimal类
a.abs() ,求a绝对值,返回值是BigDecimal类
a.compareTo(BigDecimal b), a与b比较,若相等返回0,a > bd返回1,a < b 返回-1.
a.add(BigDecimal b) ,a+b,参数和返回值都是BigDecimal类
a.subtract(BigDecimal b) ,a-b,参数和返回值都是BigDecimal类
a.multiply(BigDecimal b) ,a*b,参数和返回值都是BigDecimal类
a.divide(BigDecimal b) a/b 返回值是BigDecimal类
movePointLeft(n) ,小数点左移n位,,返回值是BigDecimal类
movePointRight(n) ,小数点右移n位,,返回值是BigDecimal类
byteValue()
doubleValue()
longValue() ,截取返回相应类型的数。
toString() ,转换成字符串
其中大多数函数都可以添加MathContent类 的参数来指定精度和舍入方式。
- hihoCoder 二进制小数 BigDecimal类
- hihoCoder 二进制小数 BigDecimal使用
- [hihoCoder] 二进制小数 解题报告
- hihoCoder 第157周 二进制小数
- BigDecimal类(精确的小数类)
- 二进制小数
- 二进制小数
- 二进制小数
- 二进制小数
- 二进制小数
- 二进制小数
- BigDecimal设置小数位数
- JAVA BigDecimal 小数处理
- BigDecimal格式化小数
- BigDecimal 小数精度问题
- BigDecimal 保留小数
- BigDecimal类(精确计算大的小数)
- java 大数类 总结 整数小数(BigInteger和BigDecimal)
- C++中延时函数
- 如何让图片自适应不同屏幕宽度,并居中显示。
- ruby on rails 把数组中的数组去掉
- [Leetcode 42] Trapping Rain Water
- stm32调试:关于STM32的DMA通道问题
- hihoCoder 二进制小数 BigDecimal类
- 源码分析android的事件分发机制
- ruby on rails compact
- JZOJ 100026. 【NOIP2017提高A组模拟7.7】图
- PAT甲级真题及训练集(21)--1102. Invert a Binary Tree (25)
- 【微信开发】开启开发者模式
- JGS SPRING+mybits 出错
- ROS学习笔记(二):安装,环境配置及指令简介
- 数据挖掘