POJ 1001 Exponentiation(大数幂,还是Java大发好!需调用多个方法)

Exponentiation

Time Limit: 500MS   Memory Limit: 10000K
Total Submissions: 156303   Accepted: 38063

Description

Problems involving the computation of exact values of very large magnitude and precision are common. For example, the computation of the national debt is a taxing experience for many computer systems.

This problem requires that you write a program to compute the exact value of Rn where R is a real number ( 0.0 < R < 99.999 ) and n is an integer such that 0 < n <= 25.

Input

The input will consist of a set of pairs of values for R and n. The R value will occupy columns 1 through 6, and the n value will be in columns 8 and 9.

Output

The output will consist of one line for each line of input giving the exact value of R^n. Leading zeros should be suppressed in the output. Insignificant trailing zeros must not be printed. Don‘t print the decimal point if the result is an integer.

Sample Input

95.123 12
0.4321 20
5.1234 15
6.7592  9
98.999 10
1.0100 12

Sample Output

548815620517731830194541.899025343415715973535967221869852721
.00000005148554641076956121994511276767154838481760200726351203835429763013462401
43992025569.928573701266488041146654993318703707511666295476720493953024
29448126.764121021618164430206909037173276672
90429072743629540498.107596019456651774561044010001
1.126825030131969720661201

Hint

If you don‘t know how to determine wheather encounted the end of input:

s is a string and n is an integer

C++

while(cin>>s>>n)

{

...

}

c

while(scanf("%s%d",s,&n)==2) //to  see if the scanf read in as many items as you want

/*while(scanf(%s%d",s,&n)!=EOF) //this also work    */

{

...

}

Source

East Central North America 1988

原题链接:http://poj.org/problem?id=1001

题意:输入两个数x,y,求x^y,(y为整型),结果小于0,输出的结果去掉前面的"0.",直接输出后面的.

这题和以前的一题差不多,http://blog.csdn.net/hurmishine/article/details/51008733

如:stripTrailingZeros()
toPlainString();

调用的方法也差不多,但这题如果结果小于小于0,要去掉前导"0.",那该怎么做呢?

把结果转换成string类型,再调用java.lang.string类中的substring()方法就OK了.

API中substring()方法的说明:

public String
substring(int beginIndex)

返回一个新的字符串,它是此字符串的一个子字符串。

该子字符串从指定索引处的字符开始,

直到此字符串末尾。

示例:

"unhappy".substring(2) returns "happy"

"Harbison".substring(3) returns "bison"

"emptiness".substring(9) returns "" (an empty string)

参数:

beginIndex - 起始索引(包括)。

返回:

指定的子字符串。

抛出:

IndexOutOfBoundsException - 如果 beginIndex 为负或大于此 String 对象的长度。

substring

public String substring(int beginIndex,int endIndex)

返回一个新字符串,它是此字符串的一个子字符串。

该子字符串从指定的 beginIndex 处开始,直到索引 endIndex - 1 处的字符。

因此,该子字符串的长度为 endIndex-beginIndex。

示例:

"hamburger".substring(4, 8) returns "urge"

"smiles".substring(1, 5) returns "mile"

参数:

beginIndex - 起始索引(包括)。

endIndex - 结束索引(不包括)。

返回:

指定的子字符串。

抛出:

IndexOutOfBoundsException - 如果 beginIndex 为负,或 endIndex 大于此 String 对象的长度,

或 beginIndex 大于 endIndex。

AC代码:

import java.math.BigDecimal;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		while (sc.hasNext()) {
			BigDecimal a = sc.nextBigDecimal();
			int b = sc.nextInt();
			a = a.pow(b);
			String str = a.stripTrailingZeros().toPlainString();
			if (str.startsWith("0.")){
				str = str.substring(1);
			}
			System.out.println(str);
		}
	}

}
时间: 2024-12-21 08:55:12

POJ 1001 Exponentiation(大数幂,还是Java大发好!需调用多个方法)的相关文章

POJ 1001 Exponentiation(JAVA,BigDecimal-&gt;String)

题目 计算实数a的n次方,具体输出格式看案例 import java.util.*; import java.math.*; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); BigDecimal a = BigDecimal.ONE; BigDecimal ans = BigDecimal.ONE; int n; while(in.hasNextBi

POJ 1001 Exponentiation 无限大数的指数乘法 题解

POJ做的非常好,本题就是要求一个无限位大的指数乘法结果. 要求基础:无限大数位相乘 额外要求:处理特殊情况的能力 -- 关键是考这个能力了. 所以本题的用例特别重要,再聪明的人也会疏忽某些用例的. 本题对程序健壮性的考查到达了变态级别了. 某人贴出的測试用例数据地址: http://poj.org/showmessage?message_id=76017 有了这些用例,几下调试就过了. 我关键漏了的用例: 000.10  1 000000  1 000.00  1 .00000  0 0000

POJ 1001 Exponentiation 模拟小数幂

模拟小数幂 小数点位 pos 非零末位 e 长度 len 只有三种情况 pos > len pos < e e < pos < len 1 #include <iostream> 2 #include <cstring> 3 using namespace std; 4 int a[500], b[500], c[500]; 5 void Cal() 6 { 7 memset(c, 0, sizeof(c)); 8 for(int i = 0; i <

POJ 1001 Exponentiation 求高精度幂

Exponentiation Time Limit: 500MS   Memory Limit: 10000K Total Submissions: 147507   Accepted: 36006 Description Problems involving the computation of exact values of very large magnitude and precision are common. For example, the computation of the n

[POJ] #1002# Exponentiation : 大数乘法

一. 题目 Exponentiation Time Limit: 500MS   Memory Limit: 10000K Total Submissions: 156373   Accepted: 38086 Description Problems involving the computation of exact values of very large magnitude and precision are common. For example, the computation of

POJ 1001 Exponentiation

Exponentiation Time Limit: 500MS   Memory Limit: 10000K Total Submissions: 171995   Accepted: 41641 Description Problems involving the computation of exact values of very large magnitude and precision are common. For example, the computation of the n

java通过反射获取调用变量以及方法

一:反射概念 可以通过Class类获取某个类的成员变量以及方法,并且调用之. 二:通过反射获取方法.变量.构造方法 1 @Test 2 // 通过反射获取类定义的方法 3 public void testMethod() throws Exception { 4 @SuppressWarnings("rawtypes") 5 Class clazz = Class.forName("java.lang.String"); 6 Method[] m = clazz.g

Java -- 子类使用super调用父类的方法A,A 调用了方法B,子类也override方法B,那么super.A()最终调用到了子类的B方法

public class SuperClass{ public void printA(){ System.out.print("SuperClass-printA"); printB(); } public void printB(){ System.out.print("SuperClass-printB"); } } public class ChildClass extends SuperClass{ public void printA(){ System

java——如何通过class调用该类的方法并获得返回值?(反射)

demo: public class T{ public static void main(String[] args) throws Exception{ //获得Person的Class对象 Class<?> cls = Person.class;//Class.forName("testJavaSE.Person"); Constructor con = cls.getDeclaredConstructor(); System.out.println("得到