题目:输入一序列的正实数和幂次,然后打印结果
这道题是关于大数计算的(大数求幂)
自己用了最简单的方法,运行后告诉我结果是inf
然后不能准确的计算数据的大小
看了网上的解答后,才明白要考虑很多
有两种解答方法,一种是java,一种是C++
下面先学习java方法:
import java.io.*;
import java.util.*;
import java.math.BigDecimal;
public class oj_1001
{
public static void main(String args[])throws Exception
{
Scanner cin=new Scanner(System.in);
while(cin.hasNext())
{
BigDecimal r=cin.nextBigDecimal();
int n=cin.nextInt();
r=r.pow(n).stripTrailingZeros();//去掉小数点后面的零
System.out.println(r);
String m_string=r.toPlainString();//不带指数段的字符串表示形式
if(m_string.charAt(0)=='0')
m_string=m_string.substring(1);//去除前面的0
System.out.println(m_string);
}
}
}
- cin.hasNext() // Returns true if the iteration has more elements.
即遍历时有元素就返回true 否则返回false
这里是为了找到底数和指数之间的空格,以此来保存前面的底数 BigDecimal
Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算,在商业计算中要用java.math.BigDecimal
双精度浮点型变量double可以处理16位有效数
float和double只能用来做科学计算或者是工程计算cin.nextBigDecimal()是为了取到底数
cin.nextInt()是为了取到指数
r.pow(n) //Returns a BigDecimal whose value is (thisn), The power is computed exactly, to unlimited precision.没有精度的限制,非常准确
后面三行代码是为了去除最后结果前面的0
- 总结:学会使用BigDecimal大浮点型对象
发现在数据处理方面,java比c++好用一些