博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 1001 Exponentiation
阅读量:4677 次
发布时间:2019-06-09

本文共 2236 字,大约阅读时间需要 7 分钟。

题意:求c的n次幂……要求保留所有小数……

 

解法:一开始只知道有BigInteger……java大数+模拟。第一次写java大数……各种报错各种exception……ORZ

没有前导0和小数后面的补位0,整数的话不输出小数点,wa点就这些···被整数后面的小数点坑死了···

 

代码:

放渣代码……

import java.math.BigInteger;  import java.util.Scanner;    public class Main  {  	public static void main(String args[])	{		Scanner cin = new Scanner(System.in);		while(cin.hasNext())		{			String s;			int n;			s = cin.next();			n = cin.nextInt();			String s1 = "";			int len = s.length();			int x = -1;			for(int i = 0; i < len; i++)			{				if(s.charAt(i) != '.')					s1 += s.charAt(i);				else					x = i;			}//去掉输入中的小数点,并记录小数点出现在第几位			BigInteger ans = new BigInteger(s1);			ans = ans.pow(n);//计算去小数点后的整数的n次幂			if(x == -1)//如果没出现小数点说明输入是整数				System.out.println(ans);			else			{				x = 5 - x;//计算小数点后有几位				x *= n;//计算积的小数点后有几位				boolean flag = false;				String s2 = ans.toString();				len = s2.length();				String res = "";				for(int i = len - 1, j = 0; (i >= 0) || (j < x); i--, j++)补小数点并去掉多余的0				{					if(i < 0)						res += '0';					else					{						if(s2.charAt(i) == '0')						{							if(flag)								res += s2.charAt(i);						}						else						{							res += s2.charAt(i);							flag = true;						}					}					if(j + 1 == x)					{						if(flag)							res += '.';						flag = true;					}				}				flag = false;				len = res.length();				for(int i = len - 1; i >= 0; i--)				{					if(res.charAt(i) == '0')//去前导0					{						if(flag)							System.out.print(res.charAt(i));					}					else					{						System.out.print(res.charAt(i));						flag = true;					}				}				System.out.println("");			}		}	} }

后来!有人告诉我还有BigDecimal!直接哭晕在厕所!

代码:

import java.math.*;import java.util.*;public class Main{	public static void main(String args[])	{		Scanner cin = new Scanner(System.in);		BigDecimal ans;		int n;		while(cin.hasNext())		{			ans = cin.nextBigDecimal();			n = cin.nextInt();			ans = ans.pow(n);			String res = ans.stripTrailingZeros().toPlainString();			if(res.charAt(0) != '0')				System.out.print(res.charAt(0));			int len = res.length();			for(int i = 1; i < len; i++)				System.out.print(res.charAt(i));			System.out.println();		}	}}

嗯~一开始输出发现有的小数变成了科学计数法~学到两个函数

BigDecimal.stripTrailingZeros()去掉后面多余的0

BigDecimal.toPlainString()用来展开科学计数法

转载于:https://www.cnblogs.com/Apro/p/4357200.html

你可能感兴趣的文章
E20180228-hm-xa
查看>>
网页打开突然慢了2、3秒。
查看>>
体验魅力Cognos BI 10 系列,第1 部分: 第一次安装
查看>>
杭电2017单人排位赛2-B魔法宝石
查看>>
二分匹配
查看>>
WebService的两种方式SOAP和REST比较 (转)
查看>>
图片,base64 互转
查看>>
ES6 有什么新东西
查看>>
cache—主存—辅存三级调度模拟
查看>>
Java线程的定义
查看>>
UglifyJS 压缩选项
查看>>
面向对象1
查看>>
Python-面向对象(组合、封装与多态)
查看>>
Mininet
查看>>
COSC2531 Programming Fundamentals
查看>>
设计模式系列 - 访问者模式
查看>>
20180507小测
查看>>
前端鼠标点击弹出浮动文字--民主、和谐、爱国、自由等
查看>>
eclipse左侧不见
查看>>
python会缓存小的整数和短小的字符
查看>>