首页 > 其他 > 详细

POJ 1001 Exponentiation

时间:2015-03-22 13:35:39      阅读:210      评论:0      收藏:0      [点我收藏+]

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

 

解法: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("");
			}
		}
	} 
}  

  

POJ 1001 Exponentiation

原文:http://www.cnblogs.com/Apro/p/4357200.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!