POJ 1001 Exponentiation

题意:求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()用来展开科学计数法

posted @ 2015-03-22 13:14  露儿大人  阅读(175)  评论(0)    收藏  举报